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

时间:2011-10-28 17:59:58

标签: c++ string cout

我的班级State的{​​{1}}数据类型名为string。在我的代码的实现中,我调用了一个setter moveType并且仅使用void setMoveType(string _moveType);实现了

当我在moveType = _moveType;的实例上调用我的getter string getMoveType() const;并将其输出到cout时,不会显示任何内容。

我在进入State功能时大声疾呼。该参数确实具有正确的值,但似乎它根本没有设置。

有没有人有任何想法?我觉得这在c ++中是简单/微不足道的,我只是完全忘记了。

getMoveType()

在上面的代码中, _minState up 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); } 的实例。此外,我已确保我的复制构造函数和赋值运算符已被修改为包含State赋值。

3 个答案:

答案 0 :(得分:2)

没有足够的代码可以肯定地知道,但我猜测:你实际上是在“set”函数中分配了一个阴影变量而从未设置过class属性,或者你的State对象实际上是被破坏并且字符串变空(因为在使用被破坏的内存时,空是一个可能的选项)。

答案 1 :(得分:1)

我对此也不确定,但您似乎将此状态存储在向量中。您可以将代码发布到如何在向量中设置元素吗?重要的是要注意,插入后不能更新向量中的元素(除非存储指向元素的指针)。同样取决于你如何调用set,可能会有问题。

答案 2 :(得分: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(string s)那样按值传递参数不是
    建议,改为传递 const引用。通过价值传递a 传递对象的完整副本
  • 小心包含和名称空间,有疑问需要额外的时间 如果要使用命名空间中定义的功能,请键入 std :: ... std,并且永远不要在头文件中键入using namespace std
  • 将私有成员初始化为合理的默认值并在类中执行 初始化列表