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
#include <iostream>
#include "vectordinamico.h"
using namespace std;
int main(){
vectorDinamico<int> aux(5);
}
vectordinamico.h
#ifndef __VECTORDINAMICO_H__
#define __VECTORDINAMICO_H__
#include <vector>
#include <list>
using namespace std;
template <typename T>
class vectorDinamico{
private:
list<vector<T> > datos;
int tamBloque;
public:
vectorDinamico();
~vectorDinamico();
vectorDinamico(int tam);
};
#endif
vectordinamico.cpp
#include "vectordinamico.h"
template <typename T>
vectorDinamico<T>::vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::~vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::vectorDinamico(int tam){
tamBloque = tam;
vector<T> aux(tamBloque);
datos.push_back(aux);
}
Pero al compilar tengo este error:
[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!
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"
#ifndef __VECTORDINAMICO_H__
#define __VECTORDINAMICO_H__
#include <vector>
#include <list>
using namespace std;
template <typename T>
class vectorDinamico{
private:
list<vector<T> > datos;
int tamBloque;
public:
vectorDinamico();
~vectorDinamico();
vectorDinamico(int tam);
};
template <typename T>
vectorDinamico<T>::vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::~vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::vectorDinamico(int tam){
tamBloque = tam;
vector<T> aux(tamBloque);
datos.push_back(aux);
}
#endif
Saludos
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?
Cita de: Kasswed en 5 Mayo 2012, 18:16 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
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
Cita de: satu en 5 Mayo 2012, 17:25 PM
"vectordinamico.h"
#ifndef __VECTORDINAMICO_H__
#define __VECTORDINAMICO_H__
#include <vector>
#include <list>
using namespace std;
template <typename T>
class vectorDinamico{
private:
list<vector<T> > datos;
int tamBloque;
public:
vectorDinamico();
~vectorDinamico();
vectorDinamico(int tam);
};
template <typename T>
vectorDinamico<T>::vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::~vectorDinamico(){
tamBloque = 0;
}
template <typename T>
vectorDinamico<T>::vectorDinamico(int tam){
tamBloque = tam;
vector<T> aux(tamBloque);
datos.push_back(aux);
}
#endif
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
Cita de: 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
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.
Precisamente, he descargado la ultima version del dev-c++ para probarlo y funciono.
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.
Cita de: 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.
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?