const对静态成员的引用

时间:2013-09-12 08:42:04

标签: c++ c++11 reference static member

struct Foo
{
    constexpr static int n = 10;
};

void f(const int &x) {}

int main()
{
    Foo foo;
    f(Foo::n);
    return 0;
}

我收到错误:main.cpp | 11 |未定义引用`Foo :: n'|。为什么呢?

2 个答案:

答案 0 :(得分:5)

标准需要编译器错误。既然你的功能

void f(const int& x)

在调用

中通过引用获取参数
f(Foo::n);

变量Foo::n odr-used 。因此需要定义

有两种解决方案。

1定义Foo::n

struct Foo    
{   
    constexpr static int n = 10; // only a declaration    
};    

constexpr int Foo::n; // definition

2按值f取参数:

void f(int x);

答案 1 :(得分:2)

你使用什么编译器版本?看起来,它在C ++ 11方言中存在一些问题(ideone.com编译得100%成功)。

也许,尝试这样做是个好主意?

struct Foo
{
    static int n;
};
int Foo::n = 10;