Passaggio di una classe per riferimento

Peco602
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

Risposte
apatriarca
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
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.

Peco602
Avevo già inserito all'interno del file .h quello relativo alla classe che intendevo passare per riferimento

apatriarca
Come ti ho già detto, posta il codice o non siamo in grado di capire che cosa non funziona.

Peco602
#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

apatriarca
Utilizza il tag code e mostra anche il codice di mazzo.h. Così com'è sembra tutto corretto. Il problema dovrebbe essere risolvibile semplicemente scrivendo:
#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.

Peco602
#ifndef Poker_mazzo_h
#define Poker_mazzo_h

class mazzo {
 
public:
    
    mazzo();
    void mischia();
    
    
    float min();
    float max();
    
private:
    
    float carte[4][13];
    
};


#endif

apatriarca
Mi sembra tutto a posto. Che compilatore usi? Su quale sistema operativo?

Peco602
uso xcode su lion

apatriarca
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?

Peco602
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

hamming_burst
forse potrebbe essere dovuto a un problema di case sensitive dato dal preprocessore con direttiva #define:

#ifndef Poker_giocatore_h
#define Poker_giocatore_h


dovrebbe essere:

#ifndef POKER_GIOCATORE_H
#define POKER_GIOCATORE_H


potrei cmq sbagliarmi...

Peco602
Grazie mille...ora funziona...siete stati gentilissimi

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.