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

void f(const int &x) {}

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

我得到错误:main.cpp|11|undefined reference to `Foo::n'|。为什么?

4

2 回答 2

5

标准要求编译器错误。由于您的功能

void f(const int& x)

在调用中通过引用将其作为参数

f(Foo::n);

该变量Foo::nodr-used。因此需要一个定义

有2个解决方案。

1 定义Foo::n

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

constexpr int Foo::n; // definition

2f按值取参数:

void f(int x);
于 2013-09-12T10:19:22.757 回答
2

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

也许,试试这个是个好主意?

struct Foo
{
    static int n;
};
int Foo::n = 10;
于 2013-09-12T08:55:38.877 回答