0

我有 2 个成员函数的问题,其中一个是 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, x,的值是什么x1,我总是返回带有 coords 的节点(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 回答