我想知道为什么这段代码无法编译时出现错误,声明'成员标识符在函数中意外...',因为'this'指针指向模块本身声明的单个对象,这使得它像隐藏参数一样如果类是独立的(即不继承任何其他类的类),那么使用'this'的情况就是残留的,并且明确地使用'this'不能有所作为。
并且还考虑使用'this'指向属性是指针是非法的(因为编译器抛出错误),为什么编译器只检测用户定义的方法中的错误(getdata1(),getdata2 (),setdata1(),setdata2())并将构造函数和析构函数视为无错误? (嗯,这表明使用'this'指向属性是指针不是非法的;这个错误背后一定有一些原因。)
class sampclass {
private:
int *data1,*data2;
public:
sampclass(); // constructor
~sampclass(); // destructor
int getdata1() const {
return this->(*data1); // ERROR: Member identifier unexpected in function sampclass::getdata1() const
}
int getdata2() const {
return this->(*data2); // ERROR: Member identifier unexpected in function sampclass::getdata2() const
}
void setdata1(int data) {
this->(*data1)=data; // ERROR: Member identifier unexpected in function sampclass::setdata1(int)
}
void setdata2(int data) {
this->(*data2)=data; // ERROR: Member identifier unexpected in function sampclass::setdata2(int)
}
};
sampclass::sampclass() {
this->data1=new int(0); // assign default value of 0
this->data2=new int(0);
cout << "\nConstruction Successful\n";
}
sampclass::~sampclass() {
delete this->data1;
delete this->data2;
//data1=NULL;
//data2=NULL;
cout << "\nDestruction Successful\n";
}
int main() {
sampclass *obj=new sampclass;
cout << "data1: " << obj->getdata1() << "\ndata2: " << obj->getdata2() << endl;
obj->setdata1(10);
obj->setdata2(99);
cout << "data1: " << obj->getdata1() << "\ndata2: " << obj->getdata2() << endl;
delete obj;
obj=NULL;
cout << "End of program";
return 0;
}
任何人都可以解释一下编译器抛出此错误背后的原因吗?我相信必须有一个解释。 请注意,错误被提及为注释;当所有'this-&gt;'时,总共会抛出4个错误并且程序会根据需要进行编译和运行从代码中删除(如预期的那样)。
提前致谢。
答案 0 :(得分:2)
您的*
位置错误。在this->X
中,X
必须命名该类的成员,而不是某些任意表达式。你的代码毫无意义!
改为写*(this->data1)
。那将给你指针this->data1
,然后取消引用它。