小编典典

对静态类成员的未定义引用

all

谁能解释为什么以下代码无法编译?至少在 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;
}

阅读 56

收藏
2022-06-23

共1个答案

小编典典

您需要在某处实际定义静态成员(在类定义之后)。尝试这个:

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

const int Foo::MEMBER;

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

那应该摆脱未定义的引用。

2022-06-23