Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基操作数->;创建类数组时出现非指针类型错误_C++_Arrays_Class - Fatal编程技术网

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

谢谢你给出了这个清晰、简洁的答案。。