constructor con parámetros que son funciones
Buenas!
Tengo la siguiente estructura de clases (obviamente es un esquema para representar la situación, no es mi código original): Código:
class A main.cpp:20: error: argument of type ‘void (B:: )(A*, char)’ does not match ‘A*’ main.cpp:23: error: argument of type ‘void (B:: )(A*)’ does not match ‘void (*)(A*)’ Entiendo lo que quiere decir, pero si por ejemplo solo declaro la clase A y en el main.cpp escribo: Código:
void eventoA (A *sender, char p) ¿Alguien puede decirme cómo corregir el error inicial (con ambas clases implementadas según el primer código)? Tampoco deseo cambiar los niveles de seguridad mostrados, lo que está en public y private debe permanecer tal cual. Gracias de antemano!! |
El problema es que el constructor espera un puntero a una función, sin embargo tú le estás pasando un método. No es lo mismo ya que los métodos están asociados a objetos, mientras que con las funciones no es así.
¿La solución? Pues no estoy seguro porque hace eones que no programo en C++ (ni ganas tengo) pero en ObjectPascal es posible pasar métodos como parámetros y luego asociarlos a objetos. No recuerdo si con C++ podía hacerse, o si hay otra solución, pero no me apetece pensar más. |
mmm me he liado tanto:confused::confused::confused:, con las simples llamadas a este que llama a este otro que no se si termine con más dudas que respuestas, pero la cosa creo que va por enviar algo que no existe, es decir en la creación de B aún no hay ninguna dirección que apunte a event_B (esta es la única explicación a la que doy fe), por ende la solución sería crear punteros del tipo al método que usas, pero que estén por encima de B o que se creen antes, después le asignas la función y así ya jala. La cuestión es que cosas ases en event_B, algo así:D.
Código:
class A Pd. Estimado Ñuño Martínez desde la ignorancia pregunto, función no es lo mismo que método? Ambos tienen parámetros variables y retornos variables, siendo la única diferencia el paradigma de programación (estructurada u orientada a objetos, es decir solo palabras no funcionalidad), porque hasta donde yo he programado da lo mismo pasar una función X a un OnClick X. Pd2. Sería interesante que alguien resolviera el hilo y dijera que está pasando ya que sí que no me funciona pero no le encuentro falla lógica. |
Cita:
Según la definición más pura de la POO, los métodos implementan la respuesta a los mensajes que se envían a un objeto. La confusión quizá provenga en la forma en la que C++, Object Pascal y similares implementan los métodos, que lo hacen como "llamadas a función con parámetro implícito", this en un caso y SELF en el otro. Sin embargo lenguajes como Small-Talk u Objective C los métodos no se implementan como si fueran funciones por lo que la diferencia está más clara. Es más, en Objective C la nomenclatura es diferente para funciones y para métodos, mientras que en Small-Talk ni siquiera existen las funciones. Para que veas, te pongo un ejemplo de método en Objective C: Código:
- (int)method:(int)i Para que lo veas más claro, cuando escribimos esto en C++: Código:
UnObjeto.Metodo (Parametro, OtroParametro); Código:
((*(UnObjeto.Metodo)) (&UnObjeto, Parametro, OtroParametro)); |
:eek::eek::eek: llevo tanto tiempo programando en un solo lenguaje que a veces olvido que el mundo no está escrito solo en C++. Gracias por despejarme ahora entiendo más que un método es algo así como la representación de los mensajes enviados y recibidos a un objeto, y una función no tienen nada que ver con esto a pesar de que reciban o regresen punteros de objetos (o eso capte en este instante, en cualquier caso nunca está de más pasarme por google a redefinir algunos de mis conceptos:o), otra vez gracias:D.
|
La franja horaria es GMT +2. Ahora son las 18:44:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi