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

您刚刚在类定义中声明了静态变量,您需要在 by doing中定义int a::c = 0;它。

于 2011-06-06T11:47:59.003 回答
3

这:

cpplearningconsole.obj:错误 LNK2001:无法解析的外部符号“public:static int a::c”(?c@a@@2HA)

不是编译器消息,而是链接器消息。你明白了,因为虽然你已经声明了 member c,但你还没有定义它。静态成员只需在一个源文件中定义即可创建。就像是:

int a::c = 0;

至于您的第二个问题,将函数声明为const,表示它不会修改正在调用它的对象。您mod的函数不会修改对象,它会修改静态成员。这就是为什么您没有收到编译器错误的原因。

于 2011-06-06T11:57:06.927 回答
1

您应该为您的变量成员添加正确的定义,在您只有声明的类中。在您的 cpp 中或在类声明之后(在它之外)添加:

int a::c = 0;

于 2011-06-06T11:48:25.863 回答
0

要回答您的另一个问题:

c是您班级的公共静态成员。任何人都可以改变它的价值,为什么不mod()呢?

于 2011-06-06T12:13:35.337 回答