Вы пометили свой метод показа как const
, который не соответствует действительности, поскольку он изменяет вектор рецептов.Когда я компилирую код, который вы обрисовали в gnu gcc 4.2.1, ошибка связана с дисквалификацией спецификатора const, а не с ошибкой, которую вы опубликовали.
Вы можете пометить свой вектор ключевым словом mutable
, но я подозреваю, что это не то, что вы действительно хотите?Помечая вектор как изменяемый, он игнорирует постоянство, которое компилятор обычно обеспечивает в пределах Menu::show() const
от вектора, и он изменяется каждый раз, когда вызывается Menu :: show ().Если вы действительно хотите использовать вектор, а не упорядоченный набор, как предлагали другие, вы можете добавить флаг состояния состояния, чтобы ваша программа знала, когда ей следует прибегнуть, или нет.
Следующий код, который у меня есть, компилируется путем изменения вектора на изменяемый, чтобы показать вам разницу, но я все же рекомендую вам не использовать sort из метода const show.
#include <vector>
#include <string>
using namespace std;
struct Recipe {
public:
string get_cname() const
{
return chef_name;
}
private:
int recipe_id;
string chef_name;
};
class Menu {
public:
void show() const;
private:
mutable vector<Recipe> recipes;
};
struct Sort_by_cname
{
bool operator()(const Recipe& a, const Recipe& b)
{
return a.get_cname() < b.get_cname();
}
};
void Menu::show() const {
sort(recipes.begin(), recipes.end(), Sort_by_cname());
}