Максимальное количество перегрузок функций? - PullRequest
1 голос
/ 13 января 2012

В C ++ есть максимальное количество функций, которые могут перегружать друг друга?

Я получаю недоумение "нет подходящей функции" ошибки.У меня есть перегруженная функция encode с около 900 различными версиями для каждого типа структуры / значения, который я кодирую (включая шаблоны для массивов / векторов).Функции кодирования вызывают друг друга в зависимости от того, какие поля должны быть закодированы.

Если я поставлю свою функцию encode(std::string) внизу файлов (.h & .cpp), то вызовы к ней возвращают "нет соответствияфункция».Если оно близко к вершине, то нет.

Что происходит и, что более важно, как мне это исправить?

(linux gcc версия 4.6.1)

1 Ответ

3 голосов
/ 13 января 2012

По вашему описанию ошибки появляются и исчезают в зависимости от того, где вы поместили функцию, это не имеет никакого отношения к числу перегрузок.Скорее, проблема в том, что вы пытаетесь вызвать перегрузку до ее объявления.

Когда у вас есть набор функций, которые все вызывают друг друга, как вы описываете (независимо от того, являются ли они перегрузками или имеют разные имена), вам обычно нужно сначала ОБЪЯВИТЬ все функции, а затем ОПРЕДЕЛИТЬ их позже, после того как все определения будут просмотрены.Обычно вы структурируете это так, что все объявления находятся в заголовочном файле (так что другие файлы и включают его), а все определения находятся в исходном файле (который включает заголовок), так что все это работает легко.Все становится более сложным, если у вас есть встроенные функции (которые обычно должны быть определены в заголовочном файле, чтобы быть встроенными во всех модулях компиляции), но общий шаблон одинаков - сначала ОБЪЯВЛЯЙТЕ все, а затем ОПРЕДЕЛЯЙТЕ все.

edit

где именно вы получаете сообщение об ошибке «нет соответствия перегрузки»?- вам нужно переместить ОПРЕДЕЛЕНИЕ, содержащее вызов, который получает эту ошибку ПОСЛЕ ДЕКЛАРАЦИИ функции кодирования (или переместить ЗАПИСЬ кодирования перед ОПРЕДЕЛЕНИЕМ с ошибкой).Пока ВСЕ ДЕКЛАРАЦИИ ДО ВСЕХ ОПРЕДЕЛЕНИЙ, заказ будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...