yiv*_*ivo 2 c++ static reference member c++11
struct Foo
{
constexpr static int n = 10;
};
void f(const int &x) {}
int main()
{
Foo foo;
f(Foo::n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:main.cpp | 11 |未定义引用`Foo :: n'|.为什么?
标准需要编译器错误.既然你的功能
void f(const int& x)
Run Code Online (Sandbox Code Playgroud)
在调用中通过引用引用它
f(Foo::n);
Run Code Online (Sandbox Code Playgroud)
变量Foo::n是odr-used.因此需要定义.
有两种解决方案.
1定义Foo::n:
struct Foo
{
constexpr static int n = 10; // only a declaration
};
constexpr int Foo::n; // definition
Run Code Online (Sandbox Code Playgroud)
2 f取值的参数:
void f(int x);
Run Code Online (Sandbox Code Playgroud)