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 ++使用指针访问对象的成员的主要内容,如果未能解决你的问题,请参考以下文章

C/C++中结构体引用中箭头->与点.的区别

急急急!!!!C# 中关于子类访问基类成员的可访问性

使用指针访问数组中的对象数据成员

如何使用 void 指针而不是对象访问类的成员变量

C++面向对象-static、const

如何访问禁用“=”运算符的类的对象?