0
class a{
public:
    int b;
    static int c;
    virtual void mod() const
    {
        c=4;
    }

};



int _tmain(int argc, _TCHAR* argv[])
{
  a bi;

  return 0;
}

これを見てください... Visual Studio C++ 2010コンパイラを使用してコンパイルした後、私は...

cpplearningconsole.obj : エラー LNK2001: 未解決の外部シンボル "public: static int a::c" (?c@a@@2HA)

これはコンパイラのバグだと思います。私にとって、本当の質問はです。constの場合、modはc変数を変更できるはずですか?

ありがとう。

4

4 に答える 4

8

クラス定義で static 変数を宣言したので、 で定義する必要がありますint a::c = 0;

于 2011-06-06T11:47:59.003 に答える
3

これ:

cpplearningconsole.obj : エラー LNK2001: 未解決の外部シンボル "public: static int a::c" (?c@a@@2HA)

コンパイラ メッセージではなく、リンカー メッセージです。member を宣言しましたが、c定義していないため、取得しています。静的メンバーを作成するには、1 つのソース ファイルでのみ定義する必要があります。何かのようなもの:

int a::c = 0;

2番目の質問については、関数を として宣言するとconst、呼び出されているオブジェクトを変更しないと述べています。mod関数はオブジェクトを変更せず、静的メンバーを変更します。これが、コンパイラ エラーが発生しない理由です。

于 2011-06-06T11:57:06.927 に答える
1

変数メンバーの正しい定義を追加する必要があります。クラスには、宣言のみがあります。cpp またはクラス宣言の直後 (その外側) に次を追加します。

int a::c = 0;

于 2011-06-06T11:48:25.863 に答える
0

他の質問に答えるには:

cクラスの public static メンバーです。誰でもその値を変更できmod()ます。

于 2011-06-06T12:13:35.337 に答える