2

私は大きなc++プロジェクトに取り組んでおり、他の人からコードを変更しています。この間に、参照VarAが複数定義されていることを示すリンカーエラーが発生しました。対応する変数を見つけました。これは、プロジェクトに直接含まれているcppファイルで定義されていました。ソースファイルをヘッダーファイルとソースファイルに変換しようとしましたが、機能しません。

次に、変数宣言を、この変数のみを含む新しい個別のh / cppに移動しようとしました。これは、次のようになります。

hファイル(aaa.h)

#ifndef AAA_H
#define AAA_H

#include "classAdefinition.h"
extern ClassA VarA;

#endif

cppファイル(aaa.cpp)

#include "aaa.h"
ClassA VarA;

ここでメインファイルに含めるaaa.hと、リンカーエラーにより、新しく作成されたものがエラーメッセージに追加さaaa.objれます(たとえば、VarAそこでも定義されています)。これはまさに私が期待したものです。しかしVarA、メインファイルのの定義を削除すると、定義されていないリンカーエラーが残り、VarA非常に混乱します。

誰かがこの行動の原因が何であるかについての手がかりを持っていますか?

私はVS2008を使用しており、プロジェクトはで作成されていcmakeます。これが問題を引き起こす可能性がありますか?たとえば、構成の問題がある可能性がありますか?テンプレートも頻繁に使用しますが、これが問題につながる可能性はありますか?

4

2 に答える 2

0

エラーは見つかりませんでしたが、サードパーティのコードのほとんどが変更され、エラーが発生しなくなったため、問題は回避されました。

于 2012-06-19T08:56:21.113 に答える
0

複数の循環呼び出しが原因で発生する複数の定義済みエラーを削除するには、ヘッダーファイルを編集して、次のマクロをインクルードすることをお勧めします(どのような場合でも)各ファイルにユニークな名前

#ifndef CAR_HPP
#define CAR_HPP
class Car 
    {
    public:
    ....
    protected:
    ....
    };
#endif
于 2012-06-11T17:53:11.620 に答える