【发布时间】:2013-07-10 17:31:19
【问题描述】:
有类似的问题,但它们都是用 C 语言,而不是 C++,所以我问了一个新问题。
我一直关注C++ tutorial,在完成动态内存、指针和结构部分后,我尝试将它们放在一个示例程序中。
本质上,我正在尝试动态分配结构数组(程序输入“produce”:P 并显示结果)。
编译器错误:'base operand of '->' has non-pointer type 'produce' 代码为 fruit[i]->item;
对不起,如果代码有点冗长(我不想省略部分以防它们是问题,即使这会导致问题“过于本地化”):
#include <iostream>
#include <string>
#include <new>
using namespace std;
struct produce {
int price;
string item;
};
int main(void) {
int num;
int i;
//Get int for size of array
cout << "Enter the number of fruit to input: ";
cin >> num;
cout << endl;
//Create a dynamically allocated array (size num) from the produce structure
produce *fruit = new (nothrow) produce[num];
if (fruit == 0) {
cout << "Error assigning memory.";
}
else {
//For 'num', input items
for (i = 0; i < num; i++) {
cout << "Enter produce name: ";
//Compiler error: 'base operand of '->' has non-pointer type 'produce'
cin >> fruit[i]->item;
cout << endl;
cout << "Enter produce price: ";
cin >> fruit[i]->price;
cout << endl;
cout << endl;
}
//Display result
for (i = 0; i < num; i++) {
cout << "Item: " << fruit[i]->item << endl;
cout << "Cost: " << fruit[i]->price << endl;
cout << endl;
}
//Delete fruit to free memory
delete[] fruit;
}
return 0;
}
【问题讨论】:
-
cin >> fruit[i].item;fruit[i]返回对对象的引用,而不是指向对象的指针。所以你必须使用点运算符,而不是箭头运算符。 -
您正在创建一个生产对象数组,数组中的每个元素都是一个生产对象。
-
换句话说,
fruit[i]是produce的一个实例,它不是指向produce的指针。因此,正如编译器已经指出的那样,在其上使用->是错误的。 -
哦...我以为水果是指针
-
@user2569582... 你想的没错。
fruit是一个指针。但是fruit[i]是一个对象。
标签: c++ arrays memory structure dynamic-data