C++ отбрасывает квалификаторы

У меня есть эта ошибка:

BSPArduino.cpp:316: ошибка: передача «const BSPArduino» в качестве «этого» аргумента «virtual void BSPArduino::enableWdt(const WATCHDOG_TIMER_DELAY&, const ___bool&)» отбрасывает квалификаторы

Этот метод определяется следующим образом:

void BSPArduino::enableWdt(const WATCHDOG_TIMER_DELAY &delay, const ___bool &enable)

Я хочу назвать это так:

enableWdt(this->watchdogTimer, ___false);

С участием:

WATCHDOG_TIMER_DELAY watchdogTimer;

Я не понимаю, почему эта ошибка сборки...

Большое вам спасибо за вашу помощь

Энтони


person Anthony    schedule 17.01.2014    source источник
comment
Контекст вызова является константным (например, void f() const { ... } )   -  person    schedule 17.01.2014
comment
Вы вызываете неконстантный метод с константным объектом.   -  person segfault    schedule 17.01.2014
comment
Энтони: Вы не принимали ни одного ответа в течение 6 лет, и если вам нужны дополнительные объяснения, обновите вопрос, включив в него определение функции, вызывающей BSPArduino::enableWdt, в противном случае прочитайте Что делать, если кто-то ответит на мой вопрос?   -  person Ted Lyngmo    schedule 04.11.2020


Ответы (2)


BSPArduino::enableWdt() — неконстантный метод. Если вы попытаетесь вызвать неконстантный метод из константного, вы получите эту ошибку.

По сути, ошибка пытается сказать вам, что вы отказываетесь от константности «этого».

person Bids    schedule 17.01.2014
comment
Слово дня... постоянство! Часто используется при описании соблюдения константной корректности. - person alan; 07.10.2017

Вы пытаетесь вызвать не-const функцию из const функции-члена; это не разрешено.

Если возможно, добавьте квалификатор const к enableWdt. Если это невозможно (поскольку он изменяет объект), вам придется либо удалить квалификатор const из вызывающей функции, либо реструктурировать код так, чтобы enableWdt вызывался откуда-то еще.

person Mike Seymour    schedule 17.01.2014