"未定义的参考"声明C ++静态成员变量

时间:2016-02-22 23:29:42

标签: c++ class object methods static

我已经开始使用Java编程,我刚刚实现了我认为是"好"语言知识水平。

为了好玩,我决定开始使用C ++进行编程,我对这门语言还是比较新的,但我是一个快速学习者,而且我认为它离Java不远。

我创建了一个测试类,它具有值和名称作为属性,对象计数器作为全局变量。

textAreaVal

执行时,程序输出此错误:

 #include<iostream>


/* local variable is same as a member's name */
class Test
{
    private:
       double x;
       std::string name;
       static int nb;
    public:
        Test(double x, std::string n)
        {
            this->x=x;
            this->name=n;
            nb=nb+1;
        }
       void setX (double x)
       {
           // The 'this' pointer is used to retrieve the object's x
           // hidden by the local variable 'x'
           this->x = x;
       }
       double getX()
       {
           return this->x;
       }
       std::string getName()
       {
           return this->name;
       }

       static int getNb()
       {
           return nb;
       }

};


int main()
{
   Test obj(3.141618, "Pi");
   std::cout<<obj.getX()<<" "<<obj.getName()<<" "<<Test::getNb()<<std::endl;
   return 0;
}
对我来说,有些中国人。

我不明白。

2 个答案:

答案 0 :(得分:4)

在C ++中,static变量本质上是围绕全局变量的语法糖。就像全局变量一样,它们必须在一个源文件中定义,其中包含:

int Test::nb;

如果你想用特定的值初始化它,

int Test::nb = 5; // or some other expression

答案 1 :(得分:0)

您的变量static int nb需要初始化,因此您需要在课程后添加声明。

class YourClass 
{
    // some stuff
}; //  Your class ends here
int Test::nb = 0;

int main() ...

以下是一些教程和信息tutorial pointcprogramming.com/tutorial/statickeyword