Ошибка внешней функции С++: слишком много аргументов для функции

У меня есть файл cw.h с кучей внешних функций, которые я хочу вызвать из моего файла cw.cpp.

Они выражаются так в файле .h. файл вместе с объявлениями структуры Type (только примеры функций, а не фактические имена функций):

extern Type* new_type(), match(), sharetype();

Но их определения и реализации находятся в файле cw.cpp.
Каждой из функций передается 1 или более параметров.

Когда я пытаюсь скомпилировать, я продолжаю получать это сообщение об ошибке для каждой из функций:

cw.h:11: error: too many arguments to function Type new_type()
cw.cpp:575: error: at this point in file

Я понятия не имею, как это исправить. И я искал последний час (-_-)

РЕДАКТИРОВАТЬ [РЕШЕНО]:

Я изменил свой код в файле .h, чтобы он соответствовал типам параметров, которые передаются функциям при их вызове. Нет больше ошибок.


person Lady_ari    schedule 01.12.2011    source источник
comment
пожалуйста, покажите cw.cpp для более полных ответов. Суть вашей проблемы в том, что ваша декларация и определения не совпадают. Как объявлено, они являются недействительными функциями, которые не принимают никаких параметров, поэтому даже 1 - это слишком много аргументов. Слушайте свой компилятор ;-)   -  person AJG85    schedule 02.12.2011


Ответы (2)


В C++ функция, объявленная с помощью (), является прототипом и означает, что функция не принимает аргументов. В C++ это эквивалентно использованию (void). Это не имеет того же значения, что и в C (т. е. функция принимает неопределенное количество аргументов).

person CB Bailey    schedule 01.12.2011
comment
Итак, все, что мне нужно было сделать, это добавить void в круглые скобки? - person Lady_ari; 02.12.2011
comment
@Lady_ari: Нет, вам нужно предоставить правильный прототип для функций. Поскольку я не знаю, как они определяются, я не могу сказать вам, что это такое. - person CB Bailey; 02.12.2011
comment
поэтому добавление типов параметров, передаваемых в функции? - person Lady_ari; 02.12.2011
comment
@Lady_ari: Ну, строго те типы, которые они определяют как принимающие, но по сути да. - person CB Bailey; 02.12.2011

Расширение ответа CharlesBailey:

В C++ функция Type* new_type() отличается от функции Type* new_type(int) из-за перегрузки.

Ваши параметры должны соответствовать их определению:

//hpp:
extern Type* new_type(int), match(float), sharetype(char);

//cpp:
Type* new_type(int x) {
  // ...
}

Type* match(float x) {
  // ...
}
person Pubby    schedule 01.12.2011