Я получаю титульную ошибку в следующем коде в строке 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()
вызывается, как показано. Я сделал другой код, где класс создается таким же образом, однако я не получил эту ошибку. Может ли кто-нибудь проверить это на возможные ошибки и рассказать мне о некоторых возможных решениях? Заранее спасибо.
Функции name
и reset
- const
. Это означает, что вы не можете изменять каких-либо членов внутри этих функций. Например, вы делаете это в функции allRobotNames.push_back
.
Либо сделать reset
и name
неконстантных функций, или объявить robotName
, как mutable
:
mutable string robotName;
Однако не злоупотребляйте mutable
. Только если имеет смысл использовать mutable
если вы его используете (например, нет изменений в объекте, который повлияет на пользователя объекта).
Если вы используете mutable
чтобы просто изменить значения членов класса, этого недостаточно, чтобы использовать его.
non-member allRobotNames cannot be declared mutable.
name()
и reset()
являются постоянными функциями, что означает, что они не могут изменить состояние *this
объекта.
name()
иreset()
объявлены какconst
но пытаются изменить переменную-член. Не делай этого.