“结构错误”;未初始化的引用成员“; 是一个NoB,特别是在C++中。
我在使用我想在某些函数中使用的结构时遇到一些问题 我在这里查看了关于头文件和.cpp中的结构的其他答案,但没有真正让它起作用 我的.h文件:“结构错误”;未初始化的引用成员“; 是一个NoB,特别是在C++中。,c++,struct,C++,Struct,我在使用我想在某些函数中使用的结构时遇到一些问题 我在这里查看了关于头文件和.cpp中的结构的其他答案,但没有真正让它起作用 我的.h文件: namespace game { class CPlayer{ struct GameData{ int mBoard[8][8]; CBoard &pBoard; }; public: CMove Play(const CBoard &pBoard,const CDea
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时,我在“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
我意识到我可能犯了一些真正的noob错误,但我很乐意得到一些指导。好的,首先,您需要声明
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);
}
必须在中初始化引用成员。通常,请尽量缩小问题范围。这与标题和cc无关。文件,您可以通过制作一个五行测试程序来重现问题。我认为很可能您的代码很混乱,并且您试图实现的目标实际上与您目前的目标相去甚远。但作为第一步,我将把
GameData
的声明移到CPlayer
声明之外,即struct GameData{…};类CPlayer{…}代码>。你有什么理由在另一个里面声明一个吗?我也会完全放弃命名空间游戏…
。在您的理解水平上,它只会使事情变得更复杂,而不会带来任何好处。第二个错误是因为编译器不知道类型,GameData
。您需要在定义函数的源文件中包含定义GameData
的头文件
。我认为@juanchopanza的建议很好。您需要重新开始,缓慢地构建代码,一次添加一小段,确保代码至少在运行过程中能够编译。在我看来,你尝试得太多太快了。这假设他的设计基本上是正确的,OP需要的只是关于实现它的技术方面的建议。我不确定这是否正确。但是如果这是OP需要的,这是一个非常有用的答案。@john你说得对,我根本不打算讨论这个设计。我认为这个问题还没有足够的信息。我发布的很多代码都是用来编译东西的虚拟代码。谢谢你的帮助,但我还是像你一样写的时候,它在我的play函数中起作用,但在我的GainsFromMoves中,我会出错。因此在标题中是:int GainsFromMoves(struct GameData GameData);在.cc文件中,它的:int GainsFromMoves(GameData GameData)但我得到了以下信息:此行有多个标记-“GameData”未在此范围内声明-应为“,”或“;”在“{”令牌类型“GameData”无法解析之前,DHMM很好地移动了结构以在.cc文件中声明它,再加上您的一些帮助,它使它至少可以编译,现在我将尝试看看它是否也可以工作。再次感谢