3

この単純なコードは簡単にコンパイルできるはずだと考える人もいるでしょう:

#include <utility>

struct Q {
    static const int X = 0;
};

int main() {
    std::pair<int, int>(Q::X, 0);
    return 0;
}

ただし、デフォルト設定 (cygwin gcc 4.5.3) を使用してこれをコンパイルするとg++、リンカー エラーがスローされます。

undefined reference to `Q::X'

私はここで完全に困惑しています.MSVCはこれをうまくコンパイルしますが、私のgccはコンパイルしません. (MinGW も正常に動作します。)

4

3 に答える 3

3

リンカは の定義を見つけられませんQ::X

これはおそらく、std::pair<>コンストラクターが引数を const への参照として受け取り、左辺値であるためです。したがって、それを参照できるようにするにQ::Xは、外部定義が必要です。Q::X

移植可能な修正:

int const Q::X;
于 2013-07-15T09:14:51.937 に答える