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

2 値渡しの引数を取りfます:

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 に答える