gpt4 book ai didi

c++ - 如果我已经创建了结构数组初始化的构造函数,通过什么调用方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:15 24 4
gpt4 key购买 nike

我试图通过类的对象调用displayChoices 方法,它是MachineManager 类的成员。但是我已经有了一个初始化结构数组的构造函数。当我们创建类编译器的对象时,我如何理解隐式创建类的默认构造函数。

问题:如何调用方法displayChoices

#include "MachineManager.h"

using namespace std;
int main()
{
MachineManager mjp;

mjp.displayChoices();

return 0;
}

struct BrewInfo {
string* DrinkName;
double* Cost;
int* Number;
};

class MachineManager {
static const int Num_Drinks = 3; /// why it works only with static?!!!

BrewInfo* BrewArr[Num_Drinks];

public:
MachineManager()
{
*BrewArr[0]->Cost = 1.25;
*BrewArr[0]->Number = 20;

*BrewArr[1]->DrinkName = "pepsi";
*BrewArr[1]->Cost = 1.15;
*BrewArr[1]->Number = 17;

*BrewArr[2]->DrinkName = "Aloe";
*BrewArr[2]->Cost = 2.00;
*BrewArr[2]->Number = 15;
};

int displayChoices();
}

int MachineManager::displayChoices() // (which displays a menu of drink names and prices)
{
cout << 1;
int choice;
cout << "|1." << *BrewArr[0]->DrinkName << " |2." << *BrewArr[1]->DrinkName << " |3." << *BrewArr[2]->DrinkName << " |" << endl;
cin >> choice;
if (!choice || choice == 0) {
system("slc");
displayChoices();
}
else
return choice;
}

displayChoices 必须在控制台中打印菜单。

最佳答案

您的源代码中存在重大错误。您还不了解指针的工作原理。

您正在使用 BrewInfo* BrewArr[Num_Drinks]; 定义一个指针数组。

但是这些指针并没有被初始化。他们指向某个地方。然后,您将取消引用这些指针(指向某处)并将值分配给内存中的某处。

这是一个重大错误。

C-Sytle 数组的数组维数必须是编译时常量。

你不能写

int x=3;
unt array[x];

这是 C99 代码(称为 VLA,可变长度数组),但不是 C++。

解决你的问题:

永远不要使用 C 风格的数组,比如 int array[5]。改用像 std::vector 这样的 STL 容器。

不要使用指针。

这是你的主要问题。使用 BrewInfo BrewArr[Num_Drinks]; 定义您的数组。请也从

中删除指针
struct BrewInfo {
string* DrinkName;
double* Cost;
int* Number;
};

关于c++ - 如果我已经创建了结构数组初始化的构造函数,通过什么调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126132/

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