Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kasswed en 5 Mayo 2012, 14:37 pm



Título: Error de compilación en Dev C++ raro
Publicado por: Kasswed en 5 Mayo 2012, 14:37 pm
Buenas

no trabajo casi nada con Windows ni con Dev C++, así que no sé muy bien a qué es debido este error.

Yo tengo un proyecto con tres archivos:

main.cpp
Código
  1. #include <iostream>
  2. #include "vectordinamico.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    vectorDinamico<int> aux(5);
  8. }

vectordinamico.h
Código
  1. #ifndef __VECTORDINAMICO_H__
  2. #define __VECTORDINAMICO_H__
  3.  
  4. #include <vector>
  5. #include <list>
  6.  
  7. using namespace std;
  8.  
  9. template <typename T>
  10. class vectorDinamico{
  11.   private:
  12.      list<vector<T> > datos;
  13.      int tamBloque;
  14.   public:
  15.      vectorDinamico();
  16.      ~vectorDinamico();
  17.      vectorDinamico(int tam);
  18. };
  19.  
  20. #endif

vectordinamico.cpp
Código
  1. #include "vectordinamico.h"
  2.  
  3.  
  4. template <typename T>
  5. vectorDinamico<T>::vectorDinamico(){
  6.   tamBloque = 0;
  7. }
  8.  
  9. template <typename T>
  10. vectorDinamico<T>::~vectorDinamico(){
  11.   tamBloque = 0;
  12. }
  13.  
  14. template <typename T>
  15. vectorDinamico<T>::vectorDinamico(int tam){
  16.   tamBloque = tam;
  17.   vector<T> aux(tamBloque);
  18.   datos.push_back(aux);
  19. }

Pero al compilar tengo este error:

Código:
[Linker error] undefined reference to `vectorDinamico<int>::vectorDinamico(int)' 
[Linker error] undefined reference to `vectorDinamico<int>::~vectorDinamico()'

Seguro que es una tontería,

¿alguien sabe qué pasa?

Saludos!


Título: Re: Error de compilación en Dev C++ raro
Publicado por: satu en 5 Mayo 2012, 17:25 pm
Hola

En la facultad me han enseñado que con templates se escribe la implementación de los métodos en el .h y no hace falta el .cpp, pero no sé el motivo de esto. Pruébalo a ver si funciona

"vectordinamico.h"
Código
  1. #ifndef __VECTORDINAMICO_H__
  2. #define __VECTORDINAMICO_H__
  3.  
  4. #include <vector>
  5. #include <list>
  6.  
  7. using namespace std;
  8.  
  9. template <typename T>
  10. class vectorDinamico{
  11.   private:
  12.      list<vector<T> > datos;
  13.      int tamBloque;
  14.   public:
  15.      vectorDinamico();
  16.      ~vectorDinamico();
  17.      vectorDinamico(int tam);
  18. };
  19.  
  20.  
  21. template <typename T>
  22. vectorDinamico<T>::vectorDinamico(){
  23.   tamBloque = 0;
  24. }
  25.  
  26. template <typename T>
  27. vectorDinamico<T>::~vectorDinamico(){
  28.   tamBloque = 0;
  29. }
  30.  
  31. template <typename T>
  32. vectorDinamico<T>::vectorDinamico(int tam){
  33.   tamBloque = tam;
  34.   vector<T> aux(tamBloque);
  35.   datos.push_back(aux);
  36. }
  37.  
  38. #endif
  39.  

Saludos


Título: Re: Error de compilación en Dev C++ raro
Publicado por: Kasswed en 5 Mayo 2012, 18:16 pm
Hola gracias,

bueno lo he probado pero eso no soluciona el problema.

Yo apostaría a que todo está bien, quizá deba ser problema del compilador de Dev C++

¿Me recomendais algún otro software para Windows?


Título: Re: Error de compilación en Dev C++ raro
Publicado por: STANHMAL en 5 Mayo 2012, 19:35 pm
¿Me recomendais algún otro software para Windows?

Usa el Visual C++, es muy bueno, o si prefieres algo libre, puedes usar el NetBeans en conjunto con el gcc, hacen una combinación potente.

$4!u2


Título: Re: Error de compilación en Dev C++ raro
Publicado por: n0z en 5 Mayo 2012, 21:04 pm
Quizá sea porque no has configurado el directorio de includes(ficheros cabecera).
Tienes que ir a opciones de proyecto, y mira en la pestaña directorio de includes y pon el directorio donde tengas el .h


Título: Re: Error de compilación en Dev C++ raro
Publicado por: exel en 5 Mayo 2012, 21:32 pm

"vectordinamico.h"
Código
  1. #ifndef __VECTORDINAMICO_H__
  2. #define __VECTORDINAMICO_H__
  3.  
  4. #include <vector>
  5. #include <list>
  6.  
  7. using namespace std;
  8.  
  9. template <typename T>
  10. class vectorDinamico{
  11.   private:
  12.      list<vector<T> > datos;
  13.      int tamBloque;
  14.   public:
  15.      vectorDinamico();
  16.      ~vectorDinamico();
  17.      vectorDinamico(int tam);
  18. };
  19.  
  20.  
  21. template <typename T>
  22. vectorDinamico<T>::vectorDinamico(){
  23.   tamBloque = 0;
  24. }
  25.  
  26. template <typename T>
  27. vectorDinamico<T>::~vectorDinamico(){
  28.   tamBloque = 0;
  29. }
  30.  
  31. template <typename T>
  32. vectorDinamico<T>::vectorDinamico(int tam){
  33.   tamBloque = tam;
  34.   vector<T> aux(tamBloque);
  35.   datos.push_back(aux);
  36. }
  37.  
  38. #endif
  39.  

 Esta solucion es correcta, ademas falta el pequeño detalle de no agregar el return 0 para main().

 Kasswed el error es que los metodos que se encuentran en vectordinamico.cpp no existen para el compilador ya que no encuentra referencia hacia el mismo. Por eso, cuando intentas compilar main.cpp, en la especificacion de este hay una referencia a vectordinamico.h, pero ni en vectordinamico.h ni en main.cpp existe referencia a vectordinamico.h.

 Perdon por la redundancia.

Saludos


Título: Re: Error de compilación en Dev C++ raro
Publicado por: Kasswed en 6 Mayo 2012, 01:49 am
Quizá sea porque no has configurado el directorio de includes(ficheros cabecera).
Tienes que ir a opciones de proyecto, y mira en la pestaña directorio de includes y pon el directorio donde tengas el .h

Hola N0Z, lo he intentado configurar pero el error persiste.

exel como he dicho, lo he probado así y tampoco me soluciona el error. Yo creo que debe ser un error de Dev C++. Diría que g++ en Linux compila, la cosa es que ahora no puedo probar.

Dev C++ es raro, si me da estos errores así cada dos por tres, paso de trabajar con él.

Descargando Visual C++ a ver qué tal.

Netbeans no me gusta mucho.


Título: Re: Error de compilación en Dev C++ raro
Publicado por: exel en 6 Mayo 2012, 02:23 am
 Precisamente, he descargado la ultima version del dev-c++ para probarlo y funciono.


Título: Re: Error de compilación en Dev C++ raro
Publicado por: Kasswed en 6 Mayo 2012, 21:10 pm
Es cursioso jaja

le pongo un return 0; al main, y me compila.

Le pongo un comentario después del return 0; al main, y ya no me compila

Jaja este Dev C++ parace muy fiable.


Título: Re: Error de compilación en Dev C++ raro
Publicado por: n0z en 8 Mayo 2012, 00:34 am
Es cursioso jaja

le pongo un return 0; al main, y me compila.

Le pongo un comentario después del return 0; al main, y ya no me compila

Jaja este Dev C++ parace muy fiable.

Cuando le pones el comentario al main, le pones un comentario de una sola linea, ¿no? no vaya a ser que se te haya pasado y estes comentando el } que cierra.

Por curiosidad, ¿es que algún compilador deja que a una función que devuelve un entero, no le digas que tiene que retornalo?