template undefined reference : help.

Iniciado por bash, 2 Mayo 2011, 05:28 AM

0 Miembros y 1 Visitante están viendo este tema.

bash

buenas a todos he estado practicando la programacion generica
entonces me surgio mesclarla con punteros  entonces cuando compilo me aparece un error.

veamos :


compiler : gcc
Ide         : code::block
s.o         : windows xp ..
 


codigo:

header.hpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <utility>
#include <vector>

using namespace std;


template<class T>
class Array{
    private:

    T *ptr_tipo;
    T  tipo;


    public:

    Array(T val, unsigned int siz);

};



def.cpp
Código (cpp) [Seleccionar]
#include "header.hpp"


template<class T>
Array<T>::Array(T val, unsigned int siz){

    ptr_tipo = 0L;
    ptr_tipo = new T;
}




main.cpp

Código (cpp) [Seleccionar]
#include <iostream>
#include "header.hpp"
using namespace std;



int main()
{
  Array<int> arreglo(12, 45);

  return 0;
  }


entonces cuando compilo me da eso:

obj\Release\main.o:main.cpp|| undefined reference to `Array<int>::Array(int, unsigned int)'|
||=== Build finished: 1 errors, 0 warnings ===|


la verdad me pasa a menudo con cualquier app
les agradeceria ayuda.


GRACIAS.


gracias por responder mis dudas

satu

Hola

Cuando se utilizan templates se implementan las funciones en el .h


header.hpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <utility>
#include <vector>

using namespace std;


template<class T>
class Array{
    private:

    T *ptr_tipo;
    T  tipo;


    public:

    Array(T val, unsigned int siz);

};


template<class T>
Array<T>::Array(T val, unsigned int siz){

    ptr_tipo = 0L;
    ptr_tipo = new T;
}




main.cpp

Código (cpp) [Seleccionar]
#include <iostream>
#include "header.hpp"
using namespace std;



int main()
{
  Array<int> arreglo(12, 45);

  return 0;
  }




Saludos
Breakbeat como forma de vida

bash

es cierto , luego de escribir me puse en eso y compilo si incluia el otro .cpp

me dio el mismo error pero con eso que me dijiste ya resolvi
gracias.. de veras que si.
gracias por responder mis dudas