Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[C++] Interfacce

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[C++] Interfacce

Messaggioda mciasco » ven gen 12, 2007 12:44 am

Salve,

sto facendo un progetto in C++ e anche se non sono nuovo della programmazione ad oggetti (uso Java) non riesco ad usare il concetto di Interfacce con C++.

Attualmente vorrei avere una classe Player a cui voglio specificare degli obiettivi che deve compiere che chiamo ''target''. Siccome non so a priori che target voglio e vorrei rendere la cosa estendibile ho pensato di usare un'interfaccia ITarget e implementarla con varie classi (vari tipi di target). Solo che mi dà errori di compilazione!!

Io ho:

in ITarget.h
Codice: Seleziona tutto
#include "Player.h"

class ITarget {
public:
    //dichiarazione di un metodo dell'interfaccia che tutte le classi derivate
    //dovranno implementare
    virtual void doSomething(Player *p); 
    ...
};





in MyTarget.h (header di una classe derivata da ITarget)
Codice: Seleziona tutto
#include "ITarget.h"
#include "Player.h"

class MyTarget : public ITarget {
public:
    //dichiaro il metodo che la classe derivata deve implementare
    void doSomething(Player *p);
    ...
};





in MyTarget.cpp (che implementa il relativo MyTarget.h)
Codice: Seleziona tutto
#include "MyTarget.h"
#include "Player.h"

   //implementa il metodo dell'interfaccia
    void MyTarget::doSomething(Player *p) {
           //fa qualcosa con *p
    }
    ...
};





in Player.h
Codice: Seleziona tutto
#include "ITarget.h"

class Player {
public:
    ITarget *target; //puntatore ad una interfaccia ITarget
    ...
};



Ok quindi quello che vorrei fare è usare in Player.cpp (che qui non mostro) un'istanza di una classe derivata da ITarget, ad esempio MyTarget. Il problema è che non mi compila!

L'errore è:
in Target.h
variable or field doSomthing declared void
doSomething declared as a virtual field


La cosa magica è che se il metodo virtuale doSomething lo dichiaro come se prendesse void ossia ''virtual void doSomething(void)'' e tolgo ovviamente tutti gli #include ''Player.h'' che non servono più allora compila correttamente!

C'è qualcosa di sbagliato?
Avatar utente
mciasco
Senior Member
Senior Member
 
Messaggi: 151
Iscritto il: ven apr 09, 2004 2:15 am

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising