2012-12-03 42 views
0

我有2个成员函数从哪一个是常量返回一个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值,yxx1是,我总是用coords (0,0)返回节点。

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

任何想法为什么?

编辑 我的拷贝构造器:

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

尽量缩小这个问题了。 –

+0

你的副本构造函数只是做了编译器提供的人做的事情,不要明确地定义它。 – GManNickG

+1

您确定'_mData'中的元素设置正确吗?你如何构建它们? – molbdnilo

回答

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

+0

我将我的副本构造函数添加到问题 – Patryk

0

似乎有拷贝构造一个问题...似乎拷贝构造函数没有按工作不好。或者,也许你没有正确填写数据。尝试了解复制构造函数和插入过程中发生了什么。 在调试模式下,尝试查看_mData中的内容。

啊这不是一个好主意,用下划线它的启动数据成员更好MDATA或M_DATA(它的速度更快写也行),

+0

为什么启动带下划线的成员不是一个好主意?打字速度是主观的。我认为实际的规则有一点细微差别 – sehe

相关问题