【发布时间】:2019-10-02 00:54:09
【问题描述】:
我正在尝试使用库存实例化自动售货机。我计划的库存是一系列类饮料。这是我到目前为止所写的内容。
VendingMachine.h - 应该包含 Drinks 类的数组
#include "Drinks.h"
class VendingMachine {
private:
static const int NUM_DRINKS = 5;
static const Drinks drinks[NUM_DRINKS];
public:
VendingMachine();
};
Now 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 << " ";
}
}
我定义饮料编译器的行抱怨它不是一个完整的 const 表达式,并且 VendingMachine::NUM_DRINKS 在上下文中是私有的。它为我的带有 NUM_DRINKS 的 for 语句声明了相同的私有上下文错误,在我的 cout 声明中它声称对于饮料和名称都相同。我需要知道如何以及在何处初始化饮料以及如何在 main 中使用而不会出现“在此上下文中为私有”错误。
由于我是一般的课程和 OO 的极端初学者,我找不到我的错误。非常感谢任何帮助。
【问题讨论】:
-
你想要
constexpr;或者只是在程序开始时手动初始化它们。 -
喜欢一开始就初始化,但我会用我目前写的最简单的解决方案
标签: c++ arrays static-initialization datamember