使用指针访问对象的成员

c++ Accessing members of objects using pointers

本文关键字:成员 对象 访问 指针      更新时间:2023-10-16

我有变量mode,我用下面的行声明:

StatusRecord mode;

StatusRecord是一个包含多个不同类型变量的struct

我现在想创建一个指向mode的指针,并通过使用函数填充其属性/字段来填充该指针的一些数据。我试过这样做:

StatusRecord mode;
StatusRecord *modePtr = &mode;
DataStore->getModeData(*modePtr);

在这里,我声明了struct变量,创建了一个指向它的指针,并使用getModeData()函数填充该指针。但是,我现在想使用刚刚在条件语句中填充的struct ptr的一个属性:

if(*modePtr->eraseSelect ==2){
    ...
}

但是我在这一行得到一个编译错误,上面写着:

错误:'*'的操作数必须是指针

这是否意味着eraseSelect属性应该是一个指针以及'modePtr ' ?我该如何修复这个错误?

试试这个:

if(modePtr->eraseSelect ==2){
    ...
}

或:

if((*modePtr).eraseSelect ==2){
    ...
}

所以你可以用"点"语法到达实例的字段,或者用"箭头"语法到达指向实例的指针的字段。大多数情况下,"arrow"更合适。

你不需要在这里取消对指针的引用:

if(modePtr->eraseSelect ==2){
    ...
}

问题在*modePtr->eraseSelect

->用于访问对象指针的成员变量。因此,ptr->someMember等价于*(ptr).someMember。你把两者混淆了,所以它没有意义,因为你解引用了两次。

你应该用modePtr->eraseSelect代替。