Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    [C++] field "C" has incomplete type

    codice:
    class AttivitaComposte : public AttivitaElementari
    {
      public:
              AttivitaComposte C[20];
              int nC;
    
              AttivitaComposte()
              {
                nC=0;
                TipoAttivita=Composta;
              }
    
              void assignC(AttivitaComposte c[])
              {
                //for (int i=0;i<nC;i++)
              }
    
    };
    Mi da errore sul metodo C, mi dice che il campo ci ha un tipo incompleto; e TipoAttivita=Composta, metodo che eredita dalla superclasse, mi dice parse error before '='

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ma C dichiarato cosi'

    AttivitaComposte C[20];

    e' un metodo?

    A me sembra un array di 20 elementi di oggetti di classe AttivitaComposte che, non essendo ancora definita, non e' neanche conosciuta dal compilatore.

    Sei sicuro che volevi dichiarare C come metodo?

  3. #3
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da oregon
    Scusa ma C dichiarato cosi'

    AttivitaComposte C[20];

    e' un metodo?

    A me sembra un array di 20 elementi di oggetti di classe AttivitaComposte che, non essendo ancora definita, non e' neanche conosciuta dal compilatore.

    Sei sicuro che volevi dichiarare C come metodo?
    si, x la risoluzine di un esercizio, spiegato a me da un prof universitario che lavora in java. Pensavo che era fattibile dichiarere un oggetto all'interno della sua stessa classe come metodo.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    "Dichiarare un oggetto all'interno della sua stessa classe come metodo"?

    Hai riletto questa frase?

    Sicuramente quello che vuoi fare e' qualcos'altro ... sicuramente non quello che hai scritto ...

    Forse, rispiegando la necessita', magari con un esempio ...

  5. #5
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    beh...scusa...non credo che mettere un metodo di tipo AttivitaComposte dentro la classe AttivitaComposte sia poi una cosa strana...se in java si può fare...

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Non puoi avere in una classe un campo il cui tipo coincide con quello della stessa classe perchè avresti una struttura ricorsiva infinita:

    supponi che la classe AttivitaComposte dichiari al suo interno un campo c di tipo AttivitaComposte; allora se te istanzi un oggetto AttivitaComposte questo ha al suo interno il campo c che è AttivitaComposte che a sua volta deve avere un suo campo c che è AttivitaComposte che a sua volta deve avere un campo c e cosi via all'infinito. Il che non è posibile.

    Ciò che invece puoi fare per avere un tipo ricorsivo è dichiarare il campo c non come un AttivitaComposte ma come un puntatore a AttivitaComposte: in questo modo la ricorsione si interrompe quando un oggetto AttivitaComposte ha il campo c pari a NULL e quindi la catena finisce. Analogo discorso vale se non hai un campo c AttivitaComposte ma hai un intero array di AttivitaComposte...anche in questo caso non dovresti dichiarare c come un array di AttivitaComposte ma come un puntatore ad AttivitaComposte che istanzierai nel modo opportuno nel costruttore.

    Il motivo per cui in java puoi dichiarare nella classe A un campo di tipo A dipende dal fatto che in java tutti gli oggetti sono in realtà puntatori ad oggetti e quindi il campo c di tipo A è un puntatore ad A inizializzato a null. In c++ ci sono gli oggetti veri e propri e accanto a questi i puntatori ad oggetti; proprio questa doppia presenza complica parecchio la sintassi del linguaggio c++.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da FinalFantasy
    beh...scusa...non credo che mettere un metodo di tipo AttivitaComposte dentro la classe AttivitaComposte sia poi una cosa strana...se in java si può fare...
    In C++ si deve fare riferimento ad un *puntatore* alla stessa classe ... cosa che un metodo puo' restituire ...

    Questo tuo "parallelo" tra Java e C++ ti confonde le idee.

    Se non conosci a perfezione Java, evita i confronti.

    Il mio consiglio è di studiare C++ "a prescindere" dalle tue conoscenze di altri linguaggi ...

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.