0

我是 C++ 新手,我正在尝试学习 static 关键字的不同用途,我读到其中之一是在类中定义一个静态变量并使用范围运算符调用它。我尝试使用它,但 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 : error LNK2001: unresolved external symbol "public: static int Vehicle::temp" (?temp@Vehicle@@2HA)

1>c:\users\avraam\documents\visual studio 2012\Projects\LearningC++\Debug\LearningC++.exe : 致命错误 LNK1120: 1 unresolved externals

什么可能导致这个问题?

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 回答