0

C++ クラスのヘッダー ファイル内で extern "C" 関数を使用しようとしています。

コンパイルすると、エラーが発生し続けます

duplicate symbol _currentInstance in:
main.o
GLHandler.o

適切な警備員がいると思っていましたが、なぜこれが起こっているのかわかりません。どんな助けでも大歓迎です。

ここにヘッダーファイルがあります。

#ifndef GLHANDLER_H
#define GLHANDLER_H

#include "LoadedObject.h"


#ifdef __cplusplus
extern "C" {
void displayCallback();
}
#endif



class GLHandler {

private:
    LoadedObject *object;

public:
    GLHandler(LoadedObject *);
    void initializeVBO(LoadedObject *);
    void renderObject(struct model *);
    void displayFunction(void);
    model *createModel(void);
    void setupDisplayCallback();


};

GLHandler *currentInstance;

#ifdef __cplusplus
}

#endif

#endif

編集: David がすぐに指摘したように、extern GLHandler *currentInstance はエラーを修正しました。

4

1 に答える 1

3

この問題はextern "C"宣言とは関係ありません。ヘッダーでグローバル変数を定義しているため、各コンパイル単位で定義されます。

GLHandler *currentInstance;

ヘッダーでは、代わりに次を使用する必要があります。

extern GLHandler *currentInstance;

次に、ちょうど 1 つの.cpp ファイルに次のものがあります。

GLHandler *currentInstance;

補足として、現時点では、ヘッダーにはクラス定義があるため、C++ に対してのみ有効です。#ifdef __cplusplusディレクティブは無意味に散らかっています (無害ではありますが) 。

于 2012-09-23T04:45:32.350 に答える