2010-08-26 19 views
5

Soy un poco confuso sobre las reglas de las declaraciones frente a las definiciones.Diferente declaración y definición en C++

tengo la siguiente declaración en funcs.h:

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

en cuenta que la American National Standard [2] antes enrgyA y B.

En el archivo de la definición funcs.cpp comienza así:

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

Compila (a través de makefile) y funciona bien.

También noté que si eliminé la declaración, el compilador parece funcionar bien.

¿Por qué no importa el cambio en el orden de los argumentos? ¿Es que los últimos 3 elementos son punteros, por lo que la diferencia en el orden no importa?

+0

posible duplicado de [¿Cuál es la diferencia entre una definición y una declaración?] (Http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a- declaración) – sbi

+2

No es un duplicado; en realidad una pregunta interesante. –

+0

El cambio en el orden * no importa. EDITAR: James McNellis lo dijo mejor en su respuesta. –

Respuesta

12

¿Por qué no importa el cambio en el orden de los argumentos?

La orden hace asunto. En C++, las funciones pueden estar sobrecargadas, por lo que dos o más funciones pueden tener el mismo nombre si tienen diferentes parámetros (o, si son funciones miembro, si difieren en const-qualification).

Usted realmente ha declarado dos funciones sumTotalEnrgyAndClush. La declaración en el archivo de encabezado declara una función que nunca se define, y la declaración en el archivo fuente declara y define una segunda función.

Si intentó utilizar la función declarada en el archivo de encabezado (por ejemplo, al llamarlo o tomar su dirección), se obtendría un error porque esa función no está definida.

+0

¡Ojalá pudiera votar esto varias veces! – Kangkan

+0

Lo que originalmente me confundió fue que mi programa funcionaba a pesar de lo que mencionó en su última oración. Desde entonces noté que había una definición adicional en mi archivo main.cpp que coincidía con la declaración en el archivo funcs.h. Pero su respuesta fue una gran adición a mi conocimiento general. Gracias. – Meir

+1

@Dave: si se apega a un conjunto de reglas donde las definiciones van para cosas declaradas en encabezados (como todo en 'xh' se define en' x.cpp'), no terminará teniendo múltiples (diferentes) definiciones por lo mismo Una vez que estás en un proyecto realmente grande (miles de archivos fuente), necesitarás esto, o nunca serás capaz de encontrar tu camino. – sbi

Cuestiones relacionadas