2017-04-08 3 views
0

リンカエラーのデバッグに関しては比較的熟練していません。このコードの設定がどうなっているのかわからないので、リンカにエラーが発生します。私の気づかない点を指摘してください。リンカエラー:関数内で別のクラスの静的変数への参照が未定義

// This is the header file 
class A 
{ 
public: 
    //Constructor, methods, etc. 

    static unsigned int const length = 5; 
}; 

class B 
{ 
public: 
    // Constructor, methods, etc. 

    inline unsigned int const & GetLength(void) 
    { 
    return A::length; 
    } 
}; 

私は、ソースファイル(CPP)に「::長さ」にGETLENGTH()関数に未定義の参照があることを言ってリンカエラーを取得しています。これは、ヘッダの代わりにソースファイルにその関数を定義しなければならないということですか?どうして?上記のクラスで変数の宣言があるので、その変数への参照を見つけることができるはずです。

編集: 申し訳ありませんが、私は無知に聞こえますが、整数型の静的変数では、定義したとおりにクラス定義内で宣言できます。これは、重複した投稿のようにクラスの定義の外で定義しなければならない非整数型の場合のみです。

+0

@Bo Perssonこれを重複としてマークしてください。私は重複したリンクを見てきましたが、これは同じ問題ではありません。他のポストは、クラスの定義の中で非整数の静的変数を使用していたので、そこで定義することはできませんでした。しかし、鉱山は不可欠な型であり、クラス内で既に定義しています。 –

+0

'static const'だったのであれば、ヘッダの宣言で十分であるはずです。しかし、現在では定義も必要です。 –

+0

ああ、あなたが 'const'バージョンでも問題になる値への参照を返すときに。参照には参照する必要があります。 –

答えて

0

あなたはと宣言しました。A::length静的メンバーです。あなたはさらにと定義する必要があります。

// in a cpp file 
#include "a.hpp" // declaration is here (the code you posted) 

int A::length = 5; // this, the definition, is also needed. 

for example thisを参照してください。

+0

申し訳ありませんが、私は静的変数の仕組みを理解できないかもしれませんが、整数型の場合、ヘッダーファイル内で変数を宣言して定義することができます。非整数型の場合のみ、クラス内で宣言して外部に定義する必要があります。 –

関連する問題