好的,所以我正在做一个有趣的项目,我是一位经验丰富的LAMP开发人员,所以我决定使用C ++。
这段代码只是我尝试制作一个比“ Hello World”困难一点的可运行应用程序的问题。我的问题在void Defer()中。我想将对PoS类的引用传递给我的ItemList,以便它在返回收据和计算时可以利用税收值
但这是我得到的错误:
“ ItemList :: ItemList(PoS&pos)”不为以下项提供初始化程序:-参考成员“ ItemList :: client”
class PoS {
private:
/*
States
0: Main Menu
1: Order Menu
2: Edit Menu
3: Tax Menu
4: Business Menu
*/
int State;
vector<ItemList> Orders;
bool IsLiveFlag;
double Tax = 0.06;
public:
PoS() {
// Constructor
}
// .......
void Defer() {
string Command;
gotoMain:
ShowMain();
cin>>Command;
if (tolowercase(Command) == "1") {
ItemList order(*this);
Orders.push_back(order);
State = 1;
Orders[Orders.size() - 1].Defer();
State = 0;
}
}
}
class ItemList {
private:
vector<Item> Items;
double Subtotal;
double Tendered;
bool Paid;
PoS& client;
public:
ItemList(PoS& pos) {
Subtotal = 0;
Tendered = 0;
Paid = 0;
PoS& client = pos;
}
由于某种原因,我无法获得对PoS的引用以作为参数发送到我的ItemList,这实在令人沮丧!
答案 0 :(得分:2)
必须在构造函数的主体之前初始化引用成员变量。这就是您帖子中编译器错误消息的含义。
代替
ItemList(PoS& pos) {
Subtotal = 0;
Tendered = 0;
Paid = 0;
PoS& client = pos;
}
使用
ItemList(PoS& pos) : client(pos) {
Subtotal = 0;
Tendered = 0;
Paid = 0;
}
您可以通过使用相同的语法形式来初始化其他成员变量来对其进行改进。
ItemList(PoS& pos) : Subtotal(0),
Tendered(0),
Paid(0),
client(pos) {}