Проблема на самом деле простая:
у вас есть класс A с неконстантным методом foo(), вы вызываете неконстантный метод foo() через ссылку на константу A.
const A& a = ...;
a.foo(); // failed
Это то, к чему стремился const: переменная const означает, что она объявлена не подлежащей изменению. В то время как foo() «собирается изменить себя» (поскольку foo() является неконстантным методом, что означает: «Я имею право изменять что-то внутри»), поэтому компилятор жалуется: у вас есть const var (a) , но вы собираетесь изменить его содержимое (через foo())
Способ решения прост, но вы должны знать, какой путь правильный:
1) Если вы уверены, что foo() должно быть разрешено для вызова через const ref и т. д., вы должны объявить его как метод const: A::foo() const {...}
2) Если вы знаете, что foo() не подходит для создания const, вам следует подумать
2.1) просмотрите «a», чтобы увидеть, не является ли более подходящим сделать неконстантным, или
2.2) найти другой метод const в A, который выполнил эту работу.
(Есть и другой способ, например, использование mutable или const_cast, но это не тот способ, который подходит для 99,9% времени. Поэтому я не упомянул здесь)
person
Adrian Shum
schedule
08.07.2011