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'|。为什么?
标准要求编译器错误。由于您的功能
void f(const int& x)
在调用中通过引用将其作为参数
f(Foo::n);
该变量Foo::n
是odr-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);
你使用什么编译器版本?看来,C++11 方言存在一些问题(ideone.com 编译成功率为 100%)。
也许,试试这个是个好主意?
struct Foo
{
static int n;
};
int Foo::n = 10;