Я пытаюсь создать торговый автомат с инвентарем. В инвентаре я планировал стать массивом классных напитков. Вот что я написал до сих пор.
VendingMachine.h - должен содержать массив класса Drinks
#include "Drinks.h"
class VendingMachine {
private:
static const int NUM_DRINKS = 5;
static const Drinks drinks[NUM_DRINKS];
public:
VendingMachine();
};
Теперь Drinks.h
#include <string>
class Drinks {
private:
std::string name;
double price;
int qtyInMachine;
public:
Drinks(std::string name, double price, int qtyInMachine);
void decrementQuantity();
};
VendingMachine.cpp
#include "VendingMachine.h"
VendingMachine::VendingMachine() {
}
Drinks.cpp
#include <string>
#include "Drinks.h"
Drinks::Drinks(std::string n, double p, int qty) : name(n), price(p), qtyInMachine(qty) {
}
void Drinks::decrementQuantity() {
qtyInMachine--;
}
Теперь для тестовой программы
#include <iostream>
#include "VendingMachine.h"
const Drinks VendingMachine::drinks[VendingMachine::NUM_DRINKS] {Drinks("Cola",1.25,20),
Drinks("Root Beer",1.35,20),Drinks("Orange Soda",1.20,20),Drinks("Grape Soda",1.20,20),
Drinks("Bottled Water",1.55,20)};
int main() {
VendingMachine vm1;
for (int i = 0; i < VendingMachine::NUM_DRINKS; i++) {
std::cout << vm1.drinks[i].name << " ";
}
}
Строка, где я определяю напитки, компилятор жалуется, что он не является целочисленным-expression и что VendingMachine :: NUM_DRINKS является закрытым в контексте. Он утверждает, что та же самая ошибка частного контекста для моего оператора for с NUM_DRINKS, также в моем утверждении cout, он заявляет то же самое для обоих напитков и имени. Мне нужно знать, как и где инициализировать напитки и как их использовать в основном, не получая ошибок «private in this context».
Поскольку я начинающий с классов и OO в целом, я не могу найти свойошибка. Любая помощь с благодарностью.