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++;结构中带有数组的动态内存分配 P>这类问题也有类似的问题,但它们都是C,而不是C++,所以我提出了一个新问题。_C++_Arrays_Memory_Structure_Dynamic Data - Fatal编程技术网

C++;结构中带有数组的动态内存分配 P>这类问题也有类似的问题,但它们都是C,而不是C++,所以我提出了一个新问题。

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; //获取数组

我一直在关注一个问题,在完成动态内存、指针和结构部分后,我试图将它们放在一个示例程序中

本质上,我试图拥有一个动态分配的结构数组(程序输入“product”:p并显示结果)

编译器错误:“->”的
基操作数对于代码
水果[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;