簡體   English   中英

std :: cout的字符串不起作用

[英]std::cout of string not working

我有一個類State ,它有一個名為moveTypestring數據類型。 在我的代碼的實現中,我調用了一個setter void setMoveType(string _moveType); 它只用moveType = _moveType;

當我調用我的getter string getMoveType() const; 在一個State實例上並將其輸出到cout,不顯示任何內容。

我在輸入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);
    }

在上面的代碼中, _minStateupState實例。 此外,我已確保我的復制構造函數和賦值運算符已被修改為包含moveType賦值。

沒有足夠的代碼可以肯定地知道,但我有一個猜測:要么你實際上分配給“set”函數中的陰影變量而根本沒有設置class屬性,或者你的State對象實際上已經被破壞了字符串變為空(因為在使用銷毀的內存時,為空是一種可能的選項)。

我也不確定,但你似乎將這個狀態存儲在一個向量中。 您可以將代碼發布到如何在向量中設置元素嗎? 重要的是要注意,插入后不能更新向量中的元素(除非存儲指向元素的指針)。 同樣取決於你如何調用set,可能會有問題。

好吧不是答案,而是一個簡短的例子,它的工作方式似乎是你打算這樣做的:

#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(string s)那樣按值傳遞參數不是
    建議,改為傳遞const引用 按值傳遞會產生傳遞對象的完整副本
  • 注意包含和名稱空間,如果你打算使用在命名空間std中定義的功能,並且永遠不要在頭文件中使用命名空間std鍵入,那么請花費額外的時間來輸入std :: ...
  • 將私有成員初始化為合理的默認值,並在類初始化列表中執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM