该指针指向一个类属性,该类属性本身就是一个指针

this pointer pointing to a class property which itself is a pointer

本文关键字:一个 属性 指针      更新时间:2023-10-16

我想知道为什么这段代码编译失败,并出现错误:"函数中的成员标识符意外……"因为"this"指针指向模块本身中声明的单个对象,这使得它在这种情况下像一个隐藏参数,因为如果类是独立的(即不继承任何其他类的类),则使用"this"是残留的,并且在显式使用"this"时不能产生任何影响。

同时考虑到使用"this"指向指针属性是非法的(因为编译器抛出错误),为什么编译器只检测用户定义方法(getdata1()、getdata2()、setdata1(()、set data2(())中的错误,并认为构造函数和析构函数是无错误的?(好吧,这表明使用"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 Successfuln";
}
sampclass::~sampclass() {
delete this->data1;
delete this->data2;
//data1=NULL;
//data2=NULL;
cout << "nDestruction Successfuln";
}
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;
}    

有人能解释一下编译器抛出这个错误的原因吗?我相信这背后一定有一个解释。请注意,这些错误是作为注释提到的;总共抛出了4个错误,当所有"this->"都从代码中删除时(正如预期的那样),程序会根据需要编译和运行。

提前谢谢。

您的*位于错误的位置。在this->X中,X必须命名类的一个成员,而不是某个任意表达式。你的代码毫无意义!

改为写入*(this->data1)。这将给你指针this->data1,然后取消引用它。