首页 > 解决方案 > 如果我已经创建了初始化结构数组的构造函数,通过什么调用该方法?

问题描述

我试图通过类的对象调用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必须在控制台中打印菜单。

标签: c++arraysconstructorstructure

解决方案


您的源代码中有一个重大错误。你还不明白指针是如何工作的。

您正在使用 定义一个指针数组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;
};

推荐阅读