2012-12-03 41 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

相關問題