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'|。为什么呢?
答案 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;