如果我已经创建了结构数组初始化的构造函数,通过什么调用方法?
Through what to call the method, if I already created constructor with initialization of array of structures?
我正在尝试通过 class 的对象调用 class MachineManager
的成员方法 displayChoices
。但是我已经有了一个初始化结构数组的构造函数。当我们创建 class 编译器的对象时,我如何理解隐式创建 class.
的默认构造函数
问题:如何调用方法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-Style 数组,例如 int array[5]
。使用像 std::vector
这样的 STL 容器。
不要使用指针。
这是你的主要问题。使用 BrewInfo BrewArr[Num_Drinks];
定义数组。请也从
中删除指针
struct BrewInfo {
string* DrinkName;
double* Cost;
int* Number;
};
我正在尝试通过 class 的对象调用 class MachineManager
的成员方法 displayChoices
。但是我已经有了一个初始化结构数组的构造函数。当我们创建 class 编译器的对象时,我如何理解隐式创建 class.
问题:如何调用方法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-Style 数组,例如 int array[5]
。使用像 std::vector
这样的 STL 容器。
不要使用指针。
这是你的主要问题。使用 BrewInfo BrewArr[Num_Drinks];
定义数组。请也从
struct BrewInfo {
string* DrinkName;
double* Cost;
int* Number;
};