Foros del Web » Programación para mayores de 30 ;) » C/C++ »

definicion multiple de funciones C++

Estas en el tema de definicion multiple de funciones C++ en el foro de C/C++ en Foros del Web. Hola Amigos! que tal? Estoy teniendo un problema que se por donde viene pero no encuentro como solucionar el error. Tengo una funcion que defino ...
  #1 (permalink)  
Antiguo 16/08/2012, 15:02
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 9 meses
Puntos: 0
definicion multiple de funciones C++

Hola Amigos! que tal?
Estoy teniendo un problema que se por donde viene pero no encuentro como solucionar el error.

Tengo una funcion que defino en un archivo .cpp que luego incluyo en otro archivo cpp y finalmente a este ultimo en el cpp que contiene a la función main() o sea hago una cascada de #includes.

el error del compilador es el siguiente:

13|multiple definition of `creavector(float)'|

el Código de prueba es este:


Archivo inc1.cpp
Código C++:
Ver original
  1. #include<iostream>
  2.     using std::cout;
  3.  
  4.     struct vector3d
  5.     {
  6.         float x;
  7.         float y;
  8.         float z;
  9.     };
  10.  
  11.     float creavector(float x)
  12.     {
  13.  
  14.  
  15.         return x;
  16.     }
  17.  
  18.  
  19.  
  20.  
  21.  
  22.     float b = creavector(1.0);

Archivo inc2.cpp

Código C++:
Ver original
  1. #include<iostream>
  2.     using std::cout;
  3.  
  4.  
  5.     #include"inc1.cpp"
  6.  
  7.  
  8.  
  9.     float c = creavector(1.0);

Archivo main.cpp

Código C++:
Ver original
  1. #include"inc2.cpp";
  2.     #include<iostream>
  3.     using std::cout;
  4.  
  5.    
  6.  
  7.     int main(int argc, char* argv[])
  8.     {
  9.  
  10.         float d = creavector(1.0);
  11.  
  12.  
  13.         return 0;
  14.     }


Alguien sabe soluciono el error que me da el compilador? al parecer es por que toma como que si se definiera la misma funcion varias veces con los mismos argumentos y tipos y se que eso no es posible.

Aclaro que este código no hace nada, solo es para simplificarlo y me puedan ayudar :)

Agradezco cualquier ayuda o consejo que puedan darme ya que estoy bastante trabado con esto.

Saludos a todos!

PD: ya probe utilizar las include guard #ifndef NOMBRE_H , #define NOMBRE_H y #endif pero pasa lo mismo.
  #2 (permalink)  
Antiguo 16/08/2012, 15:30
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: definicion multiple de funciones C++

Como lo estas compilando? El problema esta que haces include del archivo cpp.
Cada archivo cpp va por separado, despues en proceso de compilacion se linkea.

En el include tenes uqe poner la declaracion de las funciones. Osea solo la cabecera:

inc2.h:

Código C++:
Ver original
  1. float creavector(float x);


inc2.cpp:
Código C++:
Ver original
  1. #include<iostream>
  2.     using std::cout;
  3.  
  4.     struct vector3d
  5.     {
  6.         float x;
  7.         float y;
  8.         float z;
  9.     };
  10.  
  11.     float creavector(float x)
  12.     {
  13.  
  14.  
  15.         return x;
  16.     }

main.cpp:
Código C++:
Ver original
  1. #include"inc2.h";
  2.     #include<iostream>
  3.     using std::cout;
  4.  
  5.    
  6.  
  7.     int main(int argc, char* argv[])
  8.     {
  9.  
  10.         float d = creavector(1.0);
  11.  
  12.  
  13.         return 0;
  14.     }

Para compilar con gcc:

g++ main.cpp inc2.cpp


Saludos
  #3 (permalink)  
Antiguo 17/08/2012, 09:14
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: definicion multiple de funciones C++

Muchas gracias por tu respuesta sam90!! efectivamente era eso, ya lo probe y funcionó a la perfección.

Me surgio otra duda que no se como buscarla o como referirme y por eso la pregunto.

por ejemplo cuando queremos setear ciertos miembros de en un constructor hacemos lo siguiente:

Código C++:
Ver original
  1. ejemplo::ejemplo() : miembro1(false), miembro2(true)
  2. {
  3. //mas del constructor
  4. }

Pero mi duda es cuando el constructor hereda de otro como se setean los miembros? por ejemplo en esta situacion:

Código C++:
Ver original
  1. //como seteo los miembros? miembro1(false), miembro2(true)
  2. ejemplo::ejemplo() : constuctor heredado()
  3. {
  4. //
  5. }
La unica opción es hacer una función "set" para cada uno y setearlos dentro del cuerpo del constructor?

Muchas gracias nuevamente!!! saludos! que esten bien.

Etiquetas: definición, múltiple
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:58.