c ++使用指针访问对象的成员

Nob*_*fer 0 c++ struct pointers

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

StatusRecord mode;
Run Code Online (Sandbox Code Playgroud)

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

我现在想要创建一个指针mode,并使用一个函数填充其属性/字段,用一些数据填充该指针.我试过这样做如下:

StatusRecord mode;
StatusRecord *modePtr = &mode;
DataStore->getModeData(*modePtr);
Run Code Online (Sandbox Code Playgroud)

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

if(*modePtr->eraseSelect ==2){
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我在这一行上遇到编译错误:

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

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

Yur*_*ula 7

试试这个:

if(modePtr->eraseSelect ==2){
    ...
}
Run Code Online (Sandbox Code Playgroud)

或这个:

if((*modePtr).eraseSelect ==2){
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用"点"语法来访问实例的字段或"箭头"语法,以到达指向实例的指针的字段.在大多数情况下,"箭头"更合适.


the*_*ker 5

问题是在*modePtr->eraseSelect.

用于->访问对象指针的成员变量。所以,ptr->someMember等价于*(ptr).someMember. 您将两者混淆了,因此当您取消引用两次时这是没有意义的。

您应该改为使用modePtr->eraseSelect


mar*_*inj 5

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

if(modePtr->eraseSelect ==2){
    ...
}
Run Code Online (Sandbox Code Playgroud)