2011-10-28 91 views
1

我有一個類State有一個string數據類型稱爲moveType。在我的代碼實現,我調用setter void setMoveType(string _moveType);,它與剛剛moveType = _moveType;std ::字符串不工作的cout

當我打電話給我上的State一個實例,並輸出到清點吸氣string getMoveType() const;,什麼也不顯示來實現。

我在進入getMoveType()函數後進行說明。該參數確實具有正確的值,但似乎沒有設置。

有沒有人有任何想法?我覺得這是C++中簡單/微不足道的事情,我完全忘記了。

string State::getMoveType() const { 
    return moveType; 
} 

void State::setMoveType(string move_type) { 
    cout << "In setMoveType and param = " << move_type << endl; 
    moveType = move_type; 
} 

std::cout << vec_possibleSuccessors[i].getMoveType() << endl; // within loop; 

vector<State> vec_possibleSuccessors; 

    if (_minState.canMoveUp()) { 
     up = _minState.moveUp(); 
     up.setMoveType("UP"); 
     up.setF(f(up)); 
     vec_possibleSuccessors.push_back(up); 
    } 

在上面的代碼,_minState向上State實例。另外,我確定我的拷貝構造函數和賦值操作符已被修改爲包含moveType賦值。

+0

一些代碼將是有益的在這裏。 – vrrathod

+0

顯示getMoveType的代碼,以及您調用它的地方。 –

+0

@BenjaminLindley代碼添加。 –

回答

1

嘛不是一個答案,但該工作你似乎打算的方式很短的例子這項工作:

#include <string> 

class State 
{ 
    private: 
    std::string m_moveType; 

    public: 
    State() : m_moveType("unknown") {} 

    std::string getMoveType() const { return m_moveType; } 
    void setMoveType(const std::string& moveType) { m_moveType = moveType; } 
}; 

在你的主要功能或進行其他你需要的狀態向量,你可以這樣寫:

#include <iostream> 
#include <vector> 
#include "State.h" 

int main() 
{ 
    std::vector<State> states; 
    for(int i=0; i<10; ++i) 
    { 
    State newState; 
    newState.setMoveType("state"); 
    states.push_back(newState); 
    } 

    // do whatever you need to do.... 
    std::vector<State>::iterator it; 
    std::vector<State>::iterator end = states.end(); 
    for(it=states.begin(); it != end; ++it) 
    std::cout << (*it).getMoveType() << std::endl; 

    return 0; 
} 

一個幾句話:

  • 按值傳遞參數,如setMoveType(字符串s)不
    建議,通過const引用代替。按值傳遞incurrs傳遞的對象的 完整副本
  • 小心包括和命名空間,有疑問需要額外的時間 鍵入的std :: ...如果你打算使用命名空間 定義的功能std,並且永遠不要在頭文件中輸入using namespace std
  • 私有成員初始化爲合理的默認,並做到在類 初始化列表
2

確實沒有足夠的代碼知道,但我有一個猜測:要麼你實際上在「set」函數中分配了一個陰影變量,並且根本不設置class屬性,或者你的State對象具有實際上已被銷燬並且字符串變爲空(因爲當使用被破壞的內存時,空是一種可能的選擇)。

1

我對此也不確定,但您似乎將這個狀態存儲在一個向量中。你可以將代碼發佈到向量中設置元素的方式嗎?重要的是要注意,一旦插入一個向量(除非存儲一個指向該元素的指針),您就不能更新該向量中的元素。同樣取決於你打電話的方式,可能會有問題。