如何在不同时间调用函数时返回不同的字符串? C ++

时间:2014-04-23 12:59:53

标签: c++

在类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功能成为虚拟功能。

2 个答案:

答案 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;
}

可以使用无限多种变体。