&引用;“未定义引用”;声明为C++;静态成员变量 我已经开始用java编程,我刚刚达到了我认为是一个“好”的语言知识水平。 我决定用C++开始编程,我对这种语言很陌生,但我学习速度很快,我觉得离java不远。

&引用;“未定义引用”;声明为C++;静态成员变量 我已经开始用java编程,我刚刚达到了我认为是一个“好”的语言知识水平。 我决定用C++开始编程,我对这种语言很陌生,但我学习速度很快,我觉得离java不远。,c++,class,object,methods,static,C++,Class,Object,Methods,Static,我创建了一个测试类,该类的属性为值和名称,全局变量为对象计数器 #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)

我创建了一个测试类,该类的属性为值和名称,全局变量为对象计数器

 #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;
}
给我一些中文


在C++中,<代码>静态< /COD>变量基本上是全局变量的句法糖。与全局变量一样,它们必须在一个源文件中定义,其中包括:

int Test::nb;
如果你想用一个特定的值初始化它

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

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

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

int main() ...

这里有一些教程和信息,

Test(double x,std::string){this->x=x;this->name=n;nb=nb+1;}
可以写得更简洁,如
Test(double x,std::string name):x(x_uu),name(name_u){++nb nb;}
。尽可能使用初始值设定项来实现win和proffit。问得好。所使用的代码可以缩减很多,但在其他方面要简洁明了。无法针对他们保留副本,因为在知道关键字之前很难通过谷歌搜索。定义(而不是你称之为“声明”)不应该在头文件中(你的答案看起来像是建议在类定义之后将其写入头文件)@M.M您的权利是“定义”不应该在头文件中。我假设整个示例都写在一个main.cc文件中,因为类定义后面跟着main函数。
class YourClass 
{
    // some stuff
}; //  Your class ends here
int Test::nb = 0;

int main() ...