该指针指向一个类属性,该类属性本身就是一个指针
this pointer pointing to a class property which itself is a pointer
我想知道为什么这段代码编译失败,并出现错误:"函数中的成员标识符意外……"因为"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
,然后取消引用它。
相关文章:
- 如何通过一个循环将多个文件的内容分配给不同的类属性?
- 如何使用指针从另一个类访问属性
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 给一个图 G 找到此图中的所有节点 blob,以便 node.color 属性 = 特定颜色
- 让 Redhawk 组件访问另一个组件的属性
- 我有一个嵌套数组,它由另一个数组中的元素组成,这些元素分组为2.之后,我想显示每个元素的属性
- 如何在一个属性中动态存储基元类型
- 我应该使用多个角色还是一个角色,将实际属性推迟到将数据包装/公开为其属性的QObject
- 使用 QGenericMatrix 作为另一个类的属性
- 为什么要为一个属性指定不同的顶点格式
- QList 作为 qt 设计器自定义小部件中的一个属性
- 在子类中定义一个属性,然后在父类中使用它,这在PHP中是一种奇怪的行为
- 从VCL向C++公开delphi中的一个属性
- 提升因果报应-从一个属性生成多个字符串
- 我们可以为一个类指定一个属性名称吗?即使该属性是另一个表中的列
- 为什么我需要这个指针作为一个属性
- 在c++中是否可以在代码体中声明一个属性?
- 构造对象,其中一个属性依赖于另一个属性.在C++中
- 如何在现有的json11对象(c++)上附加一个属性值对
- 一个属性用于不同的类型