如果可能的话,我想作为对其他类的引用传递,并初始化一个成员

I want to pass as a reference to an other class, and initialize a member, is it possible?

本文关键字:初始化 成员 一个 引用 其他 如果      更新时间:2023-10-16

我有这种情况:

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)
    {}
};