如果可能的话,我想作为对其他类的引用传递,并初始化一个成员
I want to pass as a reference to an other class, and initialize a member, is it possible?
我有这种情况:
class GEngine {
private:
ChessBoard board;
ChessMoves checkBoard(board);
...
ChessMoves c'tor的定义如下:
class ChessMoves {
private:
ChessBoard nullChessBoard;
ChessBoard const& refBoard;
Flags cBoard[8][8]; //checkboard
public:
ChessMoves():refBoard(nullChessBoard){resetcBoard();}
ChessMoves(ChessBoard const& ref):refBoard(ref){resetcBoard();};
但是它返回这个错误:
GameEngine.cpp:250: error: ‘((GEngine*)this)->GEngine::checkBoard’ does not have class type
GameEngine.cpp:251: error: ‘((GEngine*)this)->GEngine::checkBoard’ does not have class type
GameEngine.cpp:251: error: ‘((GEngine*)this)->GEngine::checkBoard’ does not have class type
当我运行这个代码时:
//check if piece can move there
checkBoard.fillcBoard(from); //checkBoard called here...
if(checkBoard.get(to) == canPASS or checkBoard.get(to) == canEAT){
/*empty*/
}
else{
return isValid = false;
}
return isValid = true;
我想作为对另一个类的引用传递,初始化是成员:
类似的东西
class X{
private:
ref const& _Mreference;
public:
X( ref const& ref):_Mreference(ref){}
};
有可能吗?
当您执行此时
ChessMoves checkBoard(board);
您正在类作用域GEngine
中声明一个函数。这也是一个无效声明(因为board不是一个类型-请查看编译器中的其他错误消息)。当你做时
checkBoard.fillcBoard(from);
编译器认为应该访问声明函数的成员函数,这是非法的,因为GEngine::checkBoard
不是类类型(而是函数类型,编译器就是这么说的)。
你想做的是:
class GEngine {
private:
ChessBoard board;
ChessMoves checkBoard;
...
// In the implementation file
GEngine::GEngine() : board(), checkBoard(board) {}
它应该是好的。只需确保(在这种情况下)永远不会更改类中的声明顺序,因为类成员是按照其声明的顺序初始化的(但如果您混淆了它,编译器应该警告您这一点——一定要认真对待这个警告)。
您的支票簿声明无效。你不能在类中初始化这样的对象(至少在C++03中没有,而且我所知道的编译器都不支持C++11功能)。你需要在构造函数中这样做:
class GEngine {
private:
ChessBoard board;
ChessMoves checkBoard;
public:
GEngine()
:checkBoard(board)
{}
};
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员