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

LLamadas a un método de otra clase.

Estas en el tema de LLamadas a un método de otra clase. en el foro de C/C++ en Foros del Web. Es la otra duda que tengo, pero como es independiente, lo abre en un nuevo hilo. El tema es que tengo una función en concreto ...
  #1 (permalink)  
Antiguo 30/05/2011, 05:28
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 9 meses
Puntos: 1
LLamadas a un método de otra clase.

Es la otra duda que tengo, pero como es independiente, lo abre en un nuevo hilo.

El tema es que tengo una función en concreto que necesito utilizar en todas mis clases (el método sirve para ordenar cualquier array de una forma concreta).

El caso es que lo que he echo ha sido crearme una clase Array.h con su implementación Array.cpp solo para este método. Hago un include para tenerlo disponible desde todas las clases donde lo quiero utilizar.

PERO, a la hora de llamar a este método, me da este error:

Código C++:
Ver original
  1. error C2352: 'Array::ordenarArray' : llamada no válida de función miembro no estática

¿Cömo lo soluciono? Las llamadas al método las hago desde métodos de otras clases. Con la sintaxis:

Array::ordenarArray(ArrayPorParámetro);
__________________
Blog: http://a-dream-of-dragon.blogspot.com
  #2 (permalink)  
Antiguo 30/05/2011, 05:41
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: LLamadas a un método de otra clase.

Tienes que declarar la clase como estática para que no haga falta crear una instancia de la clase a la hora de llamar a las funciones.
  #3 (permalink)  
Antiguo 30/05/2011, 07:36
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: LLamadas a un método de otra clase.

vale, defino la clase como estática:
Código C++:
Ver original
  1. #ifndef ARRAY_H
  2. #define ARRAY_H
  3.  
  4. static class Array
  5. {
  6. public:
  7.     template <class T> void ordenarArray(T[], int);
  8. };
  9.  
  10. #endif ARRAY_H

Pero me da este warning:
warning C4091: 'static ' : se ha omitido a la izquierda de 'Array' cuando no hay ninguna variable declarada

y en las otras clases desde las que hago la llamada a este método:
error C2352: 'Array::ordenarArray' : llamada no válida de función miembro no estática
__________________
Blog: http://a-dream-of-dragon.blogspot.com
  #4 (permalink)  
Antiguo 30/05/2011, 07:44
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: LLamadas a un método de otra clase.

Los métodos de una clase estática deben ser estáticos.
  #5 (permalink)  
Antiguo 30/05/2011, 10:09
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: LLamadas a un método de otra clase.

Siento ser tan pesado, pero es que no me funciona. He probado esto:

Código C++:
Ver original
  1. static class Array
  2. {
  3. public:
  4.     static template <class T> void ordenarArray(T[], int);
  5. };

Y me tira un fallo con la sintaxis de template. Y esto:

Código C++:
Ver original
  1. static class Array
  2. {
  3. public:
  4.     template <class T> static void ordenarArray(T[], int);
  5. };

Explota directamente, me da un fallo de link:
error LNK2028: se hace referencia al símbolo (token) sin resolver (0A0003AA)
__________________
Blog: http://a-dream-of-dragon.blogspot.com
  #6 (permalink)  
Antiguo 30/05/2011, 10:18
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: LLamadas a un método de otra clase.

Vale, a ver, por alguna razón, si meto la implementación en el .h sí que me funciona. De otra forma, me da error.

Por si alguien tiene el mismo problema en un futuro, aquí la explicación:
http://stackoverflow.com/questions/4...ctions-on-a-te
__________________
Blog: http://a-dream-of-dragon.blogspot.com
  #7 (permalink)  
Antiguo 30/05/2011, 10:31
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 9 meses
Puntos: 9
Respuesta: LLamadas a un método de otra clase.

el error es otro. El problemas es que cuando tu declararas un template debe ser definido alli mismo.

en tu caso

static class Array
{
public:
template<typename T> static void ordenarArray(T[] datos, int num)
{
//tu código
}
};

Etiquetas: clase, llamadas
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 03:48.