0

私はC++が初めてで、静的キーワードのさまざまな使用法を学ぼうとしています。そのうちの1つは、クラス内で静的変数を定義し、スコープ演算子を使用して呼び出すことです。私はそれを使用しようとしましたが、Visual Studio 2012 はリンク エラーを生成します。私のコードは次のとおりです。

class Vehicle
{
public:
    Vehicle(){};
    ~Vehicle(){};
    static int temp;
};

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

    Vehicle::temp=100;

    std::cout << Vehicle::temp << std::endl;

    system("Pause");
    return 0;
}

エラーは次のとおりです。

1>LearningC++.obj: エラー LNK2001: 未解決の外部シンボル "public: static int Vehicle::temp" (?temp@Vehicle@@2HA)

1>c:\users\avraam\documents\visual studio 2012\Projects\LearningC++\Debug\LearningC++.exe: 致命的なエラー LNK1120: 1 つの未解決の外部

この問題の原因は何ですか?

Edit1(より明確にするため):

私の質問は、クラス内で宣言された静的変数にどのようにアクセスできますか? これはメンバー関数を使用せずに可能ですか?

4

2 に答える 2

2

を定義する必要がありtemp、これを の後に追加しclass Vechicleます。

class Vehicle
{
// Left out class code for brevity
   void useTemp() { temp = 200 ; } // Adding method inside class the uses temp
};

int Vehicle::temp = 0 ;

staticを定義するときにキーワードは必要ないことに注意してくださいtemp。変数にアクセスするためにクラスのインスタンスはstatic必要ないため、含まれていたコードmainは正しいです。

Vehicle::temp=100;

std::cout << Vehicle::temp << std::endl;

Vehicle v1 ;
v1.useTemp() ;

std::cout << Vehicle::temp << std::endl;
于 2013-04-24T19:03:23.483 に答える
0

staticクラス外でメンバーを定義する必要があります。

#include <iostream>

class Vehicle
{
  public:
     Vehicle(){};
    ~Vehicle(){};
    static int temp;
};

int Vehicle::temp = 0; 

int _tmain(int argc, TCHAR* argv[])
{
    Vehicle::temp = 100;  //^^access the variable with classname plus ::
    std::cout << Vehicle::temp << std::endl;
    std::cin.get();
    return 0;
}

main次に、クラス名の後に::変数名を付けてアクセスします。

于 2013-04-24T19:03:52.747 に答える