Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C++] Dichiarazione inrociata di classi

    Salve gente!
    Ho un problemino che non so come risolvere:
    c'e' una classe in cui c'e' una funzione membro che e' friend di un'altra... solo che questa stessa funzione membro utilizza l'atra classe. In altre parole le due dichiarazioni si incorciano. Cosi' e' piu' chiaro:
    class c1
    {
    public:
    void funzione(c2 &classe); // errore! c2 non e' stata dichiarata
    };

    class c2
    {
    public:
    friend void c1::funzione(c2 &classe);
    };

    Come posso evitare questo problema? Chesso' come delle specie di prototipi per classi o cose simili... bho me lo sono appena inventato.
    Grazie mille
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    se non mi ricordo male potevi dichiare una classe vuota prima di un'altra e poi infarcirla dopo. Mi spiego meglio:

    class c1;

    class c2
    { funzione friends con c1
    };

    class c1
    { funzioni di c1
    };


    se non mi sbaglio questa dovrebbe essere la sintassi giusta.
    fammi sapere se ricordo bene.:metallica
    :mavieni: Luca
    http://digilander.libero.it/lpelo
    http://www.myspace.com/redpile

  3. #3
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    e' proprio cosi lucapanda1979!:metallica
    e' possibile dichiarare una classe senza definirla!!
    ciao

  4. #4
    ho gia, provato, ma nn funziona....
    e' possibile che sia colpa del compilatore che e' vecchio?
    (Borland Turbo C++ 3.0)

    Grazie ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  5. #5
    ah giusto, vi devo anche dire perche' non va:
    mi dice che la funzione membro non appartiene alla classe c1, in effetti, questo e' logico, perche' non e' ancora stata dichiarata nella classe...
    grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  6. #6
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    bhe non ho capito se hai risolto...cmq ilfatto e' che in questi casi(cioe' quando viene dichiarata una classe senza definirla) non e' possibile dichiarare e/o accedere a oggetti di quella classe finche' non viene definita(possono essere dichiarati solo puntatori a quella classe)!tutto cio' e' normale, perche ancora non 'esiste'(diciamo)la classe!
    si rimedia facilmente implementando il metodo funzione fuori dalla classe c1 e in particolare dopo la definizione della classe c2
    in particolare:

    #include<iostream>
    class c2;//dichiarazione di c2
    class c1
    {
    public:
    void funzione(c2*);
    };
    /*definizione di c2*/
    class c2
    {
    public:
    friend void c1::funzione(c2*);
    private:
    int x;
    };
    /*implementazione del metodo dopo la definizione di c2*/
    void c1::funzione(c2* cl){
    cout<<(cl->x)<<endl;
    }

    main(){
    c1 var;
    c2 var2;
    var.funzione(&var2);
    }

    vabbe' io ho usato un puntatore a c2 ma va bene anche per riferimento o per valore
    ciao

  7. #7
    ehmmmmm
    sono uno scemo
    ho messo la classe che andava prima dopo e viceversa... vabbe lassamo stare che e' meglio.
    Grazie cmq
    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8
    Problemi con 'friend ricorsivi' si risolvono dichiarando 'friend' tutta la classe. A volte e` l`unico modo.

  9. #9
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    Originariamente inviato da r0x
    Problemi con 'friend ricorsivi' si risolvono dichiarando 'friend' tutta la classe. A volte e` l`unico modo.
    :master:

  10. #10
    ummm anche questa e' una soluzione...
    ma per il mio caso e' meglio l'altra
    grassie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.