std::cout of string not working

std::cout of string not working

本文关键字:not working string of cout std      更新时间:2023-10-16

我有一个类State,其string数据类型称为moveType。在我的代码的实现中,我调用setter void setMoveType(string _moveType);,它仅用moveType = _moveType;

实现

当我在State的实例上调用getter string getMoveType() const;并将其输出到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对象实际上已经被销毁并且字符串变为空(因为使用销毁的内存时为空是一种可能的选择)。

这不是一个答案,而是一个简短的例子,它的工作方式,你似乎希望它的工作方式:

#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; }
};

在你的main函数中,或者你需要一个状态向量,你可以这样写:

#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引用。按值传递会产生a传入对象的完整副本
  • 小心使用包含和名称空间,这无疑会占用额外的时间输入std::…如果您打算使用在命名空间中定义的特性在头文件中不要使用std命名空间。
  • 将私有成员初始化为合理的默认值,并在类中进行初始化器列表

我对此也不确定,但您似乎将此状态存储在向量中。你能张贴代码,你如何设置元素在矢量?需要注意的是,一旦vector对象插入元素,就不能对其进行更新(除非存储指向该元素的指针)。