错误:传递' const string'作为push_back的这个论点

时间:2014-11-08 22:04:47

标签: c++ string

我在第19行的以下代码中得到了名义错误

#include <string>
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;

namespace robot_name 
{
    vector<string> allRobotNames;
    class robot
    {
        public:
            string robotName;

            string name() const
            {
                if(robotName.empty())
                {
                    robotName.push_back('a'+rand()%26);//this line
                    robotName.push_back('a'+rand()%26);//also here
                    robotName+=to_string(rand()%10) + to_string(rand()%10) + to_string(rand()%10);//and here
                    return robotName;
                }
                else
                {
                    return robotName;
                }
            };

            void reset() const
            {
                allRobotNames.push_back(robotName);
                while(find(allRobotNames.begin(), allRobotNames.end(), robotName)!=allRobotNames.end())
                {
                    robotName="";//here as well
                    robotName.push_back('a'+rand()%26);
                    robotName.push_back('a'+rand()%26);
                    robotName+=to_string(rand()%10) + to_string(rand()%10) + to_string(rand()%10);
                };
            };
    };
};

此外,第20,21和35行中的类似错误。类被const robot_name::robot robot实例化,然后如图所示调用robot.name()。我已经完成了其他代码,其中类以相同的方式实例化,但是我没有得到这个错误。有人可以检查这个可能的错误并告诉我一些可能的解决方案吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

namereset函数为const。这意味着您无法更改这些功能中的任何成员。例如,您在allRobotNames.push_back函数中执行此操作。

要么resetname非const函数,要么将robotName声明为mutable

mutable string robotName;

但不要滥用mutable。只有在使用mutable时才有意义(例如,对象中没有会影响对象用户的变化)。

如果您正在使用mutable来更改类成员的值,那么这还不足以成为使用它的理由。

答案 1 :(得分:0)

name()reset()是常量函数,这意味着它们无法改变*this对象的状态。