【发布时间】:2016-02-22 23:29:42
【问题描述】:
我已经开始使用 Java 进行编程,我刚刚达到了我认为在语言知识方面“良好”的水平。
为了好玩,我决定开始使用 C++ 进行编程,我对这门语言相当陌生,但我学得很快,我认为它离 Java 不远。
我创建了一个测试类,它有一个值和一个名称作为属性,一个对象计数器作为全局变量。
#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;
}
程序执行时输出此错误:
In function `Test::Test(double, std::string)':
(.text._ZN4TestC2EdSs[_ZN4TestC5EdSs]+0x4a): undefined reference to `Test::nb'
(.text._ZN4TestC2EdSs[_ZN4TestC5EdSs]+0x53): undefined reference to `Test::nb'
In function `Test::getNb()':
(.text._ZN4Test5getNbEv[_ZN4Test5getNbEv]+0x6): undefined reference to `Test::nb'
error: ld returned 1 exit status
给我一些中文。
我不明白。
【问题讨论】:
-
Test(double x, std::string) { this->x=x; this->name=n; nb=nb+1; }可以更简洁地写成Test(double x_, std::string name_) : x(x_), name(name_) { ++nb; }。尽可能使用初始化程序以获得胜利和利润。 -
好问题。使用的代码可能会缩减很多,但要简洁明了。不能对他们进行重复,因为在您知道关键字之前很难用谷歌搜索。
标签: c++ class object methods static