c ++使用指针访问对象的成员
Posted
技术标签:
【中文标题】c ++使用指针访问对象的成员【英文标题】:c++ Accessing members of objects using pointers 【发布时间】:2015-09-09 09:44:14 【问题描述】:我有变量mode
,我用以下行声明:
StatusRecord mode;
StatusRecord
是一个struct
,它包含多个不同类型的变量。
我现在想创建一个指向mode
的指针,并通过使用函数填充其属性/字段来用一些数据填充该指针。我试过这样做:
StatusRecord mode;
StatusRecord *modePtr = &mode;
DataStore->getModeData(*modePtr);
在这里,我声明struct
变量,创建一个指向它的指针,并使用getModeData()
函数填充该指针。但是,我现在想使用我刚刚在条件语句中填充的 struct ptr
的属性:
if(*modePtr->eraseSelect ==2)
...
但是我在这一行收到了一个编译错误,上面写着:
错误:'*' 的操作数必须是指针
这是否意味着eraseSelect
属性应该是指针以及'modePtr`?我该如何解决这个错误?
【问题讨论】:
【参考方案1】:试试这个:
if(modePtr->eraseSelect ==2)
...
或者这个:
if((*modePtr).eraseSelect ==2)
...
因此,您可以使用“点”语法来访问实例的字段或使用“箭头”语法来访问指向实例的指针的字段。大多数情况下,“箭头”更合适。
【讨论】:
【参考方案2】:你不需要在这里取消引用你的指针:
if(modePtr->eraseSelect ==2)
...
【讨论】:
【参考方案3】:问题在*modePtr->eraseSelect
。
->
用于访问指向对象的指针的成员变量。所以,ptr->someMember
等价于*(ptr).someMember
。您将两者混为一谈,因此您取消引用两次没有意义。
您应该改用modePtr->eraseSelect
。
【讨论】:
以上是关于c ++使用指针访问对象的成员的主要内容,如果未能解决你的问题,请参考以下文章