为什么我总是使用默认参数获取对象?

时间:2012-12-03 22:25:20

标签: c++ const

我遇到了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);

无论y1yxx1的值如何,我总是返回带有坐标(0,0)的节点。

然而,节点的其他参数是不同的,只有coords如上所述。

知道为什么吗?

修改 我的副本构造函数:

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

2 个答案:

答案 0 :(得分:5)

BoardNode nodeToAddAsNeighbor = ....;

调用复制构造函数。它定义了吗?它是如何定义的?也许它不像宣传的那样有效。 E.g。

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

显然

A a(7);
A b = a;

你不能指望b.i包含7,而是包含42

答案 1 :(得分:0)

似乎复制构造函数有问题......似乎复制构造函数不能正常工作。或者您可能没有正确填写数据。尝试了解复制构造函数和插入期间发生的情况。 在调试模式下,尝试查看_mData中的内容。

啊使用下划线启动数据成员不是一个好主意,最好使用mData或m_data(写入速度也快),