我的班级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
赋值。
答案 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;
}
一些评论: