C++ 基操作数->;创建类数组时出现非指针类型错误
我想了解为什么基本操作数C++ 基操作数->;创建类数组时出现非指针类型错误,c++,arrays,class,C++,Arrays,Class,我想了解为什么基本操作数->在某些情况下有效,而在其他情况下与指针一起使用时无效 我意识到当我收到此错误时,我需要使用而不是->。我试图理解为什么当我将指针作为数组元素引用为p[I].somefunct()时需要,而当我将指针直接引用为(p+I)->somefunct()时需要-> 我编写了一个示例程序来说明这两种方法,并且怀疑是否有更多有经验的声音可以解释这种C++行为。 我还想了解是否有更好的方法来创建、访问和销毁指向存储在堆上的类的指针数组 #包括 使用名称空间std; 类KClass{
->
在某些情况下有效,而在其他情况下与指针一起使用时无效
我意识到当我收到此错误时,我需要使用
而不是->
。我试图理解为什么当我将指针作为数组元素引用为p[I].somefunct()
时需要
,而当我将指针直接引用为(p+I)->somefunct()
时需要->
我编写了一个示例程序来说明这两种方法,并且怀疑是否有更多有经验的声音可以解释这种C++行为。 我还想了解是否有更好的方法来创建、访问和销毁指向存储在堆上的类的指针数组
#包括
使用名称空间std;
类KClass{
公众:
int x;
KClass(){};
~KClass(){};
int getx(){return x;}
void setx(int data){x=data;return;}
};
int main()
{
//使用堆创建类的数组
KClass*pk=新的KClass[3];//3个指针的数组
KClass*pk1=新的KClass[3];//由3个指针组成的数组
//做点什么
对于(int i=0;i<3;i++){
(pk+i)->setx(i);
差异很简单。p[i]
与*(p+i)
完全相同。i[p]
是一种有效(尽管非常混乱)的数组订阅写入形式
因此,当您使用p[i]
表单时,您已经取消了对结果的引用,因此您可以通过
成员访问来访问成员
如果您使用(p+i)
而不取消引用,则需要通过->
访问运算符访问成员,因为您处理的是指针
只要再写一遍-->
只不过是一种方便快捷的方式。每当你写像a->x
这样的东西时,你总是可以把它写成(*a)。x
谢谢你给出了这个清晰、简洁的答案。。