1. ホーム
  2. c++

[解決済み】静的クラスメンバへの未定義参照

2022-04-12 08:55:49

質問

以下のコードがなぜコンパイルできないのか、どなたか教えてください。少なくともg++ 4.2.4では。

さらに興味深いのは、MEMBERをintにキャストすると、なぜコンパイルできるのでしょうか?

#include <vector>

class Foo {  
public:  
    static const int MEMBER = 1;  
};

int main(){  
    vector<int> v;  
    v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
    v.push_back( (int) Foo::MEMBER ); // OK  
    return 0;
}

解決方法は?

実際にどこか(クラス定義の後)でstaticメンバを定義する必要があります。 これを試してみてください。

class Foo { /* ... */ };

const int Foo::MEMBER;

int main() { /* ... */ }

これで未定義の参照は解消されるはずです。