【发布时间】:2026-01-12 00:30:01
【问题描述】:
我有三个 .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);
}`
这段代码无法编译,我不知道从哪里开始。
来自编译器的错误消息:
||=== 构建:在 adthangman 中调试(编译器:GNU GCC 编译器)===|
错误:“guesser”声明为引用但未初始化|
错误:'provider' 声明为引用但未初始化|
在构造函数中'Game::Game(int, const char*, const Provider&)':|
错误:表达式列表在 mem-initializer [-fpermissive] 中被视为复合表达式| 警告:逗号运算符的左操作数无效[-Wunused-value]|
错误:从“const char*”类型的表达式中对“Guesser&”类型的引用无效初始化|
错误:从“const Provider”类型的表达式中对“Provider&”类型的引用无效初始化| ||=== 构建失败:5 个错误,1 个警告(0 分钟,0 秒)===|
非常感谢任何帮助。
【问题讨论】:
-
guesser不应作为参考。 -
我不能以任何其他方式声明它而不会收到我没有满足构造函数格式的错误。
-
请发帖MCVE。
-
我对@987654327@ 的最佳猜测是类型不完整。
provider上的编译器非常清楚。 -
克里斯,当我这样做时确实提到类型不完整:Guesser guesser;我刚开始学习 C++,所以我不知道该怎么做。我花了两天时间没有用。
标签: c++ class variables reference initialization