Различные объявления и определения в C ++ - PullRequest
5 голосов
/ 26 августа 2010

Я немного запутался в правилах деклараций и определений.

У меня есть следующее объявление в funcs.h:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double ans[2],double enrgyA[18][18],double     enrgyB[18][18]);

Обратите внимание, что ans [2] предшествует enrgyA и B.

В файле funcs.cpp определение начинается следующим образом:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double enrgyA[18][18],double enrgyB[18][18],double ans[2])

Он компилируется (через make-файл) и работает нормально.

Я также заметил, что если я удаляю объявление, компилятор, кажется, справляется очень хорошо.

Почему изменение порядка аргументов не имеет значения? Неужели последние 3 элемента являются указателями, поэтому разница в порядке не имеет значения?

1 Ответ

12 голосов
/ 26 августа 2010

Почему изменение порядка аргументов не имеет значения?

Заказ имеет значение . В C ++ функции могут быть перегружены, поэтому две или более функций могут иметь одно и то же имя, если они имеют разные параметры (или, если они являются функциями-членами, если они различаются по const-квалификации).

Вы фактически объявили две sumTotalEnrgyAndClush функции. Объявление в заголовочном файле объявляет одну функцию, которая никогда не определяется, а объявление в исходном файле объявляет и определяет вторую функцию.

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

...