我是一個完整的初學者在C++中,一切都一直很好,直到現在。我是新來的指針的想法(我來自python),我有這個奇怪的錯誤。因此基本上,我創建了這個「SearchNode」類,下面找到它的一個方法「getChildren」,它應該返回其他SearchNode實例的向量,表示Knight(棋盤)可以從中移動的可能單元格這是目前的狀態。 (BFS)C++向量中的所有元素指向相同的元素
也就是說,當我完成推入我的向量時,所有元素突然指向第一個元素。有人可以幫我在這裏嗎?
PS:這與
c++ push_back doesn't work as it is supposed類似的問題...但與Angela(誰在編寫自己的編譯器)不同,我是C++的初學者。您的幫助將不勝感激。
UPDATE
我擺脫了INT *,並使用陣列我的狀態。我現在可以成功搜索圖表(因此狀態正常)並找到最短路徑,但似乎無法重建路徑。
爲了測試,我從{0,0}開始,可以找到{4,4},但根據getPath方法的路徑是{4,4},{3,6},{3,6 },{3,6} ...({3,6}的無限循環)。我的父指針或我的getPath函數有問題嗎?感謝您的支持提前。
//Search class
class SearchNode
{
public:
//Variables
SearchNode *m_parent;
array<int,2> m_state; //I don't understand typedef's yet, will use them when I'm clearer with them :)
//Normal Constructor
SearchNode(array<int,2>& state_, SearchNode *parent_=nullptr) :
m_state(state_),
m_parent(parent_)
{}
//Method to get Next reachable states. Returns instances of SearchNode.
vector<SearchNode> getChildren()
{
int legalMoves[8][2] = {{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
vector<SearchNode> children;
children.reserve(8);
for(int i=0; i<8; i++)
{
int x = (m_state[0] + legalMoves[i][0]);
int y = (m_state[1] + legalMoves[i][1]);
if((x>-1) and (x<9) and (y<9) and (y>-1)) // Within the bounds of the board
{
array<int,2> childState = {x,y};
SearchNode childNode = SearchNode(childState,this);
children.push_back(childNode);
}
}
return children;
}
void getPath()
{
cout<<"\nPath: ";
cout<< this->print();
SearchNode current = *this;
unsigned int counter = 1;
while((current.m_parent!=nullptr) and counter< 10)
{
counter++;
cout<< (current.m_parent)->print();
current = *(current.m_parent);
}
cout << (current.m_parent)->print();
}
string print()
{
stringstream out;
out << "{" << this->m_state[0] << "," << this->m_state[1] << "} ";
return out.str();
}
};
'SearchNode'是否有合理的拷貝構造函數? –
你在照顧[this](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-reeree)嗎? –
你在調試器中看過for循環嗎? – ChiefTwoPencils