gpt4 book ai didi

C++动态内存分配与结构中的数组

转载 作者:行者123 更新时间:2023-11-30 04:16:45 27 4
gpt4 key购买 nike

已经有类似的问题,但它们都是用 C,而不是 C++,所以我问了一个新问题。

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

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

编译器错误:'base operand of '->' has non-pointer type 'produce' for the code 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;
}

最佳答案

我在您的代码中看到 produce *fruit,因此,fruit 是指向一个或多个 produce 对象的指针。这意味着 fruit[i] 评估为单个实际的 produce 对象。由于它是一个对象,要访问它的 item 成员,您可以使用 . 符号。如果它是一个指针,你只会使用 -> 。所以你需要把fruit[i]->item;改成fruit[i].item

关于C++动态内存分配与结构中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com