我有三个.cpp文件:Game,Guesser和Provider。这些头文件中的每一个都包含其各自的类声明。
在我的Game类中,我需要Guesser和Provider的私有变量。
Guesser有一个非默认的构造函数
Guesser::Guesser (int wordLength, const char* wordListFilename){}
所以我必须通过Game构造函数的初始化列表对其进行初始化。
到目前为止我所拥有的:
Guesser& guesser;
Provider& provider;
`Game::Game(int& wordLength, const char* filename, const Provider& providr) : guesser(wordLength, filename),provider(providr)
{
numMissedGuesses = 0;
wordSoFar = string(wordLength, FILL_CHARACTER);
}`
这段代码无法编译,我在这里迷失了。
来自编译器的错误消息:
|| === Build:在adthangman中调试(编译器:GNU GCC编译器)=== |
错误:'guesser'声明为引用但未初始化|
错误:'provider'被声明为引用但未初始化|
在构造函数'Game :: Game(int,const char *,const Provider&)'中:|
错误:表达式列表在mem-initializer [-fpermissive]中被视为复合表达式 警告:逗号运算符的左操作数无效[-Wunused-value] |
错误:“Guesser&”类型引用的初始化无效来自'const char *'|
类型的表达式错误:“Provider&”类型引用的初始化无效来自'const Provider'类型的表达式 || ===构建失败:5个错误,1个警告(0分钟,0秒(秒))=== |
非常感谢任何帮助。
答案 0 :(得分:0)
您不能在作为引用的对象上使用构造函数。它本身不是对象,而是指向另一个对象。因此要么将参数guesser变量传递给类型为guesser的另一个对象,要么将其更改为常规变量。此外,您不能将const对象分配给非常量引用。使提供程序参数非常量。
答案 1 :(得分:0)
guesser
范围内声明 provider
和class Game { }
。
但是,不能通过为类的构造函数提供参数来初始化对类对象的引用。引用必须由预先存在的对象初始化。 (非成员引用也可以由临时对象初始化,但这有点不同。)
此外,参考成员通常是课堂设计的红旗。您可能希望使用guesser
和provider
的常规成员对象而不是引用。
class Game {
Guesser guesser;
Provider provider;
};