c++ - 如果我已经创建了初始化结构数组的构造函数,通过什么调用该方法?
问题描述
我试图通过类的对象调用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]
. 改用 STL 容器std::vector
。
不要使用指针。
这是你的主要问题。用 定义你的数组BrewInfo BrewArr[Num_Drinks];
。请同时删除指针
struct BrewInfo {
string* DrinkName;
double* Cost;
int* Number;
};
推荐阅读
- function - 搜索项目的功能
- python - 如何在python中引用子模块
- node.js - 如何让 prod 和 dev Firebase 项目具有相同的 Auth 配置?
- javascript - 从动态数据列表中选择文本和值
- javascript - 如何根据增量和减量按钮的输入显示多次输入的卡片?
- java - 以递归关系解决 StackOverflow 异常
- dialogflow-es - 如何使用 DialogFlow 从 Telegram 获取用户位置
- javascript - 实现打开/关闭标签功能的最佳方式
- node.js - VSCode 并使用 launch.json 启动项目
- docker - 如何解决 VBoxManage 未找到问题