0

2つのメンバー関数に問題があり、そのうちの1つはconstがconstを返します。

const BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx) const
{
    return _mData[rowIdx*_mNumColumns + colIdx];
}

BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx)
{
    return _mData[rowIdx*_mNumColumns + colIdx];
}

しばらくして、私はコードを使用します:

// where this is a Board holding Nodes in std::vector
BoardNode nodeToAddAsNeighbor   = this->getBoardNode(x1+ x, y1+ y);

y1、、、の値が何であれy、私は常にノードを座標で返します。xx1(0,0)

それにもかかわらず、ノードの他のパラメータは異なり、座標のみが上記のとおりです。

理由は何ですか?

私のコピーコンストラクターを編集します:

BoardNode::BoardNode(const BoardNode & other) :
    _mNodeType(other._mNodeType),
    _coordinates( other._coordinates ),
    _neighboursVector( other._neighboursVector) {}
4

2 に答える 2

5
BoardNode nodeToAddAsNeighbor = ....;

コピーコンストラクターを呼び出します。それは定義されていますか?それはどのように定義されていますか?おそらく、宣伝どおりに機能しません。例えば

struct A
{
    int i;
    A(int i)    : i(i)  {}
    A(A const&) : i(42) {}
};

明らかに

A a(7);
A b = a;

biに7が含まれることは期待できませんが、42が含まれます。

于 2012-12-03T22:28:22.200 に答える
0

コピーコンストラクターに問題があるようです...コピーコンストラクターがうまく機能していないようです。または、データを正しく入力していない可能性があります。コピーコンストラクター中および挿入中に何が起こるかを理解するようにしてください。デバッグモードで、_mData内に何があるかを確認してください。

ああ、データメンバーをアンダースコアで始めるのは良い考えではありません。mDataまたはm_dataの方が良いです(書き込みも高速です)。

于 2012-12-03T22:30:58.277 に答える