C++;结构中带有数组的动态内存分配 P>这类问题也有类似的问题,但它们都是C,而不是C++,所以我提出了一个新问题。
我一直在关注一个问题,在完成动态内存、指针和结构部分后,我试图将它们放在一个示例程序中 本质上,我试图拥有一个动态分配的结构数组(程序输入“product”:p并显示结果) 编译器错误:“->”的C++;结构中带有数组的动态内存分配 P>这类问题也有类似的问题,但它们都是C,而不是C++,所以我提出了一个新问题。,c++,arrays,memory,structure,dynamic-data,C++,Arrays,Memory,Structure,Dynamic Data,我一直在关注一个问题,在完成动态内存、指针和结构部分后,我试图将它们放在一个示例程序中 本质上,我试图拥有一个动态分配的结构数组(程序输入“product”:p并显示结果) 编译器错误:“->”的基操作数对于代码水果[i]->项具有非指针类型“product” 抱歉,如果代码有点冗长(我不想遗漏部分,以防出现问题,即使这会导致问题“过于本地化”): #包括 #包括 #包括 使用名称空间std; 结构生产{ 国际价格; 字符串项; }; 内部主(空){ int-num; int i; //获取数组
基操作数对于代码水果[i]->项具有非指针类型“product”
代码>
抱歉,如果代码有点冗长(我不想遗漏部分,以防出现问题,即使这会导致问题“过于本地化”):
#包括
#包括
#包括
使用名称空间std;
结构生产{
国际价格;
字符串项;
};
内部主(空){
int-num;
int i;
//获取数组大小的int
cout>num;
cout我在您的代码product*fruit
中看到,fruit
是指向一个或多个product对象的指针。这意味着fruit[I]
计算为单个实际的product
对象。由于它是一个对象,要访问它的项
成员,可以使用
符号。如果它是指针,则只会使用->
。因此需要将果[i]->item;
更改为果[i].item
考虑以下简单示例,以明确如何访问对象,而不是对象指针:
int *arr = new (std::nothrow) int[10];
for(int i=0; i< 10 ; ++i)
{
arr[i]=i;
}
delete [] arr;
int*arr=new(std::nothrow)int[10];
对于(int i=0;i<10;++i)
{
arr[i]=i;
}
删除[]arr;
arr中的每个元素(例如arr[0])都是一个简单的int,出于示例的考虑,它将使用索引值初始化数组中每个元素的内容,然后删除int数组。对于您的情况,fruit数组中的每个元素(fruit[0]、fruit[1]等)都是product类型的对象(而不是指向对象的指针)。因此,必须使用访问操作符而不是->cin>>水果[i]进行访问。项;
水果[i]
返回对对象的引用,而不是指向对象的指针。因此您必须使用点运算符,而不是箭头运算符。您要创建一个生成对象数组,数组中的每个元素都是一个生成对象。换句话说,fruit[i]
是product
的一个实例,它不是指向product
的指针。因此,在它上面使用->
是错误的,正如编译器已经指出的那样。哦……我以为水果是一个pointer@user2569582...你想得对。水果
是一个指针。但是水果[i]
是一个对象。@user2569582它指的是std
名称空间。@notNullGothik实际上,他的原始代码是滥用名称空间std;
所以他的nothrow
不符合std
@greatwolf正确,因为我没有声明using语句,我使用了完全限定的版本。对于原始代码e、 你可以省略std。
int *arr = new (std::nothrow) int[10];
for(int i=0; i< 10 ; ++i)
{
arr[i]=i;
}
delete [] arr;