C++中的Const过程,Visual Studio C++2010中的奇怪错误

Const procedure in C++, weird error in Visual Studio C++ 2010?

本文关键字:错误 C++2010 Studio Const 中的 过程 Visual C++      更新时间:2023-10-16
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(

我想这是一个编译器错误。对我来说,真正的问题是。如果c变量是常量,mod应该能够修改吗?

谢谢。

您刚刚在类定义中声明了静态变量,您需要通过执行int a::c = 0;在中定义

这:

cpplearningconsole.obj:错误LNK2001:未解析的外部符号"public:static int a::c"(?c@a@@2HA(

不是编译器消息,而是链接器消息。你得到了它,因为尽管你已经声明了成员c,但你还没有定义它。静态成员只需要在一个源文件中定义,就可以创建它们。类似于:

int a::c = 0;

至于第二个问题,将函数声明为const,说明它不修改被调用的对象。mod函数不修改对象,而是修改静态成员。这就是为什么你不会得到一个编译器错误。

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

int a::c = 0;

回答您的另一个问题:

c是您类的公共静态成员任何人都可以更改其值,那么为什么不更改mod()呢?