我是菜鸟,尤其是在 C++ 方面。
我在使用我想在某些函数中使用的结构时遇到了一些问题。
我在这里查看了有关头文件和 .cpp 中的结构的其他答案,但并没有真正让它发挥作用。
我的 .h 文件:
namespace game {
class CPlayer{
struct GameData{
int mBoard[8][8];
CBoard &pBoard;
};
public:
CMove Play(const CBoard &pBoard,const CDeadline &pDue);
private:
int GainsFromMoves(struct GameData gameData);
等.....
然后在我的 .cc 文件中,我尝试将此数据用于:
CMove CPlayer::Play(const CBoard &pBoard,const CDeadline &pDue)
{
GameData gameData;
gameData.pBoard = pBoard;
等...
在我尝试声明 GameData 时出现错误 uninitialized reference member in ‘struct game::CPlayer::GameData’
稍后尝试使用 GainsFromMoves 函数时,我也遇到了一些错误。
int GainsFromMoves(GameData gameData){
int test = 0;
return test;
}
error: Multiple markers at this line
- expected ‘,’ or ‘;’ before ‘{’ token
- ‘GameData’ was not declared in this
scope
我意识到我可能犯了一些非常菜鸟的错误,但我很乐意提供一些指导。
最佳答案
好的,首先,您需要声明CMove
、CBoard
和CDeadline
。我添加了一些虚拟的以解决其他问题:
namespace game {
struct CBoard {};
struct CDeadline {};
struct CMove {};
...
然后,你的结构体 CPlayer::GameData
需要初始化它的 CBoard
引用,它应该是 const
:
class CPlayer{
struct GameData
{
GameData(const CBoard& board) : pBoard(board) {}
int mBoard[8][8];
const CBoard &pBoard;
};
public:
CMove Play(const CBoard &pBoard,const CDeadline &pDue);
private:
int GainsFromMoves(struct GameData gameData);
};
接下来,在你的.cc
文件中,定义成员函数时需要命名空间和类名:
namespace game
{
CMove CPlayer::Play(const CBoard &pBoard,const CDeadline &pDue)
{
GameData gameData(pBoard);
return CMove();
}
int CPlayer::GainsFromMoves(GameData gameData){
int test = 0;
return test;
}
} // namespace game
这消除了错误,至少对于这个简单的 main:
int main()
{
game::CBoard b;
game::CDeadline d;
game::CPlayer p;
p.Play(b, d);
}
关于c++ - 结构错误 "uninitialized reference member",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12382748/