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
2 値渡しの引数を取りf
ます:
void f(int x);
どのコンパイラのバージョンを使用していますか? C++11の方言にいくつか問題があるようです(ideone.comはそれを100%成功させてコンパイルしました)。
たぶん、代わりにこれを試してみるのは良い考えですか?
struct Foo
{
static int n;
};
int Foo::n = 10;