Passaggio di una classe per riferimento
Salve a tutti,
ho un problema con un programmino in c++ su xCode. Ho definito due classi con i rispettivi file .h e .cpp ed in una di esse ho scritto il prototipo di una funzione che riceve come parametro l'altra classe per riferimento, ma appena inserisco il nome della classe e il simbolo & mi dà errore dicendo che la classe che sto inserendo è un tipo sconosciuto....grazie dell'aiuto
ho un problema con un programmino in c++ su xCode. Ho definito due classi con i rispettivi file .h e .cpp ed in una di esse ho scritto il prototipo di una funzione che riceve come parametro l'altra classe per riferimento, ma appena inserisco il nome della classe e il simbolo & mi dà errore dicendo che la classe che sto inserendo è un tipo sconosciuto....grazie dell'aiuto
Risposte
Hai dichiarato la classe nel file o incluso un qualche header in cui ci fosse tale dichiarazione? Se è la risposta è no ad entrambe allora non puoi definire un variabile con quel tipo. Devi perlomeno inserire qualcosa come
da qualche parte prima di utilizzare la classe (in questo caso potresti comunque creare puntatori o reference a istanze della classe). Se il problema non è questo allora devi inserire un po' di codice.
class NomeClasse;
da qualche parte prima di utilizzare la classe (in questo caso potresti comunque creare puntatori o reference a istanze della classe). Se il problema non è questo allora devi inserire un po' di codice.
Avevo già inserito all'interno del file .h quello relativo alla classe che intendevo passare per riferimento
Come ti ho già detto, posta il codice o non siamo in grado di capire che cosa non funziona.
#ifndef Poker_giocatore_h
#define Poker_giocatore_h
#include "mazzo.h"
class giocatore {
public:
giocatore();
void mostra();
void cambia(int, mazzo &);
int mano[4][13];
};
#endif
Questo è il file header...è la dichiarazione della classe giocatore in cui voglio utilizzare la classe mazzo
#define Poker_giocatore_h
#include "mazzo.h"
class giocatore {
public:
giocatore();
void mostra();
void cambia(int, mazzo &);
int mano[4][13];
};
#endif
Questo è il file header...è la dichiarazione della classe giocatore in cui voglio utilizzare la classe mazzo
Utilizza il tag code e mostra anche il codice di mazzo.h. Così com'è sembra tutto corretto. Il problema dovrebbe essere risolvibile semplicemente scrivendo:
In ogni caso il problema sembrerebbe legato all'header mazzo.h.
#ifndef Poker_giocatore_h #define Poker_giocatore_h /* Ho sostituito l'inclusione dell'header con la forward declaration della classe. */ class mazzo; /* Se è tutto pubblico non vale la pena far che usare una struttura? * C'è comunque una ragione per avere tutto pubblico? */ class giocatore { public: giocatore(); void mostra(); void cambia(int, mazzo &); int mano[4][13]; }; #endif
In ogni caso il problema sembrerebbe legato all'header mazzo.h.
#ifndef Poker_mazzo_h #define Poker_mazzo_h class mazzo { public: mazzo(); void mischia(); float min(); float max(); private: float carte[4][13]; }; #endif
Mi sembra tutto a posto. Che compilatore usi? Su quale sistema operativo?
uso xcode su lion
Non ho modo di testarlo io stesso, ma mi mostreresti a questo punto quali librerie hai incluso nel file sorgente in cui ottieni l'errore prima di includere il file che credo si chiami giocatore.h?
Non ho aggiunto nessuna libreria in particolare c'è solo iostream...nel momento in cui inserisco tra gli argomenti della funzione il riferimento alla classe mazzo il compilatore mi dà l'errore UNKNOWN TYPE NAME MAZZO
forse potrebbe essere dovuto a un problema di case sensitive dato dal preprocessore con direttiva #define:
dovrebbe essere:
potrei cmq sbagliarmi...
#ifndef Poker_giocatore_h #define Poker_giocatore_h
dovrebbe essere:
#ifndef POKER_GIOCATORE_H #define POKER_GIOCATORE_H
potrei cmq sbagliarmi...
Grazie mille...ora funziona...siete stati gentilissimi