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

[SOLUCIONADO] Problemas de Linkado

Estas en el tema de Problemas de Linkado en el foro de C/C++ en Foros del Web. Hola de nuevo: Aqui estoy con un nuevo problema. Estoy creando un par de clases. Una de ellas maneja char * y la otra es ...
  #1 (permalink)  
Antiguo 20/10/2014, 12:29
 
Fecha de Ingreso: octubre-2014
Ubicación: Torrejón de Ardoz
Mensajes: 4
Antigüedad: 9 años, 6 meses
Puntos: 0
Problemas de Linkado

Hola de nuevo:

Aqui estoy con un nuevo problema. Estoy creando un par de clases. Una de ellas maneja char * y la otra es un template que maneja array.

Dentro de la clase char * tengo una función que trocea la cadena, según el parámetro de entrada y devulve un array de subcadenas.

El problema viene al linkar con el programa proncipal ya que me dice que no encuentra la referencia a funciones de la clase array.

Os pongo el código de la función split:

Código C++:
Ver original
  1. array<cadena> cadena::split(const char c)
  2. {
  3.     array<cadena> dummy;
  4.     cadena subcadena;
  5.     char *aux, *p;
  6.    
  7.     aux = this->_array;
  8.    
  9.     p = strchr(aux, c);
  10.     while(p)
  11.      {
  12.        while (aux < p)
  13.         {
  14.          subcadena.newElemento(aux[0]);
  15.          aux++;
  16.         }
  17.        dummy.newElemento(subcadena);
  18.  
  19.        aux = p + 1;
  20.        p = strchr(aux, c);
  21.      }
  22.    
  23.     return dummy;
  24. }

La cabecera de la clase array:

Código C++:
Ver original
  1. #ifndef ARRAY_TEMPLATE
  2. #define ARRAY_TEMPLATE
  3.  
  4. template <class T>
  5. class array {
  6.     private:
  7.         int elementos;
  8.         T *_array;
  9.     public:
  10.         array();
  11.         array(int);
  12.         array(int, array<T>);
  13.         ~array();
  14.        
  15.         int in(T);
  16.        
  17.         int newElemento(T);
  18.         int nElementos() {return this->elementos;}
  19.         T element(int);
  20.        
  21.         T& operator[](int);
  22.         array<T>& operator=(T);
  23.         operator int() const {return (0!=elementos);}
  24.        
  25. };
  26.  
  27. #endif

Y el programa pincipal:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include "cadena.h"
  3.  
  4.  
  5. int main()
  6. {
  7.     cadena temp;
  8.    
  9.    
  10.     temp.str(123);
  11.     printf("Cadena: %s", temp.str());
  12.    
  13.     return 0;
  14. }

Este es el mensaje de salida del compilador:


Código C++:
Ver original
  1. iapellaniz@ia152421:~/Escritorio/aplicacion$ g++ -Wall -o main main.c array.cpp cadena.cpp
  2. /tmp/ccCgVCZ7.o: En la función `cadena::split(char)':
  3. cadena.cpp:(.text+0x9ca): referencia a `array<cadena>::array()' sin definir
  4. cadena.cpp:(.text+0xa3a): referencia a `array<cadena>::newElemento(cadena)' sin definir
  5. cadena.cpp:(.text+0xa9f): referencia a `array<cadena>::~array()' sin definir
  6. collect2: error: ld returned 1 exit status

No encuentro el problema porque, tanto en la cabecera de mi clase cadena, como el el .cpp tengo un include "array.h"

Gracias por las posibles respuestas.

Saludos.
  #2 (permalink)  
Antiguo 21/10/2014, 00:12
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problemas de Linkado

los templates tienen que estar definidos e implementados en un archivo de cabecera... no pueden tener código fuera del archivo de cabecera.
  #3 (permalink)  
Antiguo 21/10/2014, 03:17
 
Fecha de Ingreso: octubre-2014
Ubicación: Torrejón de Ardoz
Mensajes: 4
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problemas de Linkado

Hola eferion:

Gracias por la respueta. Solucionado.

Saludos.

Etiquetas: char, clase, funcion, int, programa
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 18:36.