Убедитесь, что сигнатуры функций объявления и определения совпадают. Одна распространенная ошибка - забыть спецификатор const
в определении функции. Например,
struct A
{
void do_foo_const(int a, int b) const;
};
// An incorrect definition.
// Notice the missing 'const' here V
void A::do_foo_const(int a, int b)
{
...
}
// correct definition.
void A::do_foo_const(int a, int b) const
{
...
}
Это разделение позволяет существующим и неконстантным вариантам функций существовать рядом друг с другом и возвращать разные результаты. Примером стандартной библиотеки C ++, использующей эту функцию, является std::vector<T>::at
. Обратите внимание, как константная версия возвращает константную ссылку, но неконстантная версия возвращает неконстантную ссылку.