我在第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()
。我已经完成了其他代码,其中类以相同的方式实例化,但是我没有得到这个错误。有人可以检查这个可能的错误并告诉我一些可能的解决方案吗?提前谢谢。
答案 0 :(得分:1)
name
和reset
函数为const
。这意味着您无法更改这些功能中的任何成员。例如,您在allRobotNames.push_back
函数中执行此操作。
要么reset
和name
非const函数,要么将robotName
声明为mutable
:
mutable string robotName;
但不要滥用mutable
。只有在使用mutable
时才有意义(例如,对象中没有会影响对象用户的变化)。
如果您正在使用mutable
来更改类成员的值,那么这还不足以成为使用它的理由。
答案 1 :(得分:0)
name()
和reset()
是常量函数,这意味着它们无法改变*this
对象的状态。