在类Fox
中,我需要构建一个函数并返回一个字符串。让我们说Fox* fox = new Fox();
要求是:
std::string thing1 = fox->say();
std::string thing2 = fox->say();
和thing1 !=thing2
那我怎么能实现这个目标呢?
我在下面尝试了代码,但它有一些错误:error: ‘foxWords’ does not name a type
class Fox : public Canid{
public:
Fox(){
int a = 0;
std::vector<string> foxWords;
foxWords.push_back("words1");
foxWords.push_back("words2");
}; // constructor is needed
string say(){
a+=1;
return foxWords.at(a%2);
}
string name(){
return "fox";
}
};
感谢bwtrent,我认为你是对的。我修改了上面的代码并返回错误
‘foxWords’ was not declared in this scope
是因为string say()
函数是从虚函数派生的吗?必须使Fox的父功能中的say
功能成为虚拟功能。
答案 0 :(得分:4)
你朝着正确的方向前进,但是,你应该在构造函数中将元素推送到向量中。创建你的构造函数,推送那些相同的元素,你应该很高兴。
你不能像现在这样推送项目,必须在函数内部(可能是构造函数)完成。
答案 1 :(得分:1)
如果唯一的目标是返回不同的字符串,则不需要 一个向量。类似的东西:
class Fox
{
int myState;
public:
Fox() : myState( 0 ) {}
std::string say()
{
++ myState;
std::ostringstream s;
s << myState;
return s.str();
}
}
将确保用于大量呼叫的唯一字符串。或者您
可以使用rand()
?
std::string Fox::say()
{
int size = rand() % 10 + 1;
std::string results;
while ( results.size() < size ) {
results += "abcdefghijklmnopqrstuvwxyz"[rand() % 26];
}
return results;
}
可以使用无限多种变体。