Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55

    [C++] Errore nel costruttore

    Salve ragazzi, non capisco perchè qui
    codice:
    Campionato::Campionato() : 
        squadre[0]("Italia"),
        squadre[1]("Germania"),
        squadre[2]("Francia"),
        squadre[3]("Belgio"),
        squadre[4]("Brasile"),
        squadre[5]("Argentina"),
        squadre[6]("Uruguay"),
        squadre[7]("USA"),
        squadre[8]("Cile"),
        squadre[9]("Spagna"),
        squadre[10]("Portogallo"),
        squadre[11]("Olanda"),
        squadre[12]("Inghilterra"),
        squadre[13]("Messico"),
        squadre[14]("Colombia"),
        squadre[15]("Ghana"),
        gironi[0](squadre[0],squadre[8],squadre[6],squadre[7], "A"),
        gironi[1](squadre[1],squadre[2],squadre[15],squadre[13], "B"),
        gironi[2](squadre[3],squadre[4],squadre[10],squadre[12], "C"),
        gironi[3](squadre[5],squadre[9],squadre[11],squadre[14], "D"){;}
    
        mi dice:
        Campionato.cpp: In constructor ‘Campionato::Campionato()’:
        Campionato.cpp:4: error: expected ‘(’ before ‘[’ token
    Campionato.cpp:4: error: expected ‘{’ before ‘[’ token
    Campionato.cpp: At global scope:
    Campionato.cpp:4: error: expected unqualified-id before ‘[’ token
    Perchè?
    Grazie

  2. #2
    La sintassi dell'initialization list si può usare per inizializzare oggetti "interi", non sotto-oggetti (come nel caso dei singoli elementi degli array). La sintassi corretta sarebbe:
    codice:
    Campionato::Campionato() : 
        squadre{
            "Italia",
            "Germania",
            "Francia",
            "Belgio",
            "Brasile",
            "Argentina",
            "Uruguay",
            "USA",
            "Cile",
            "Spagna",
            "Portogallo",
            "Olanda",
            "Inghilterra",
            "Messico",
            "Colombia",
            "Ghana"},
        gironi{
            Girone(squadre[0],squadre[8],squadre[6],squadre[7], "A"),
            Girone(squadre[1],squadre[2],squadre[15],squadre[13], "B"),
            Girone(squadre[3],squadre[4],squadre[10],squadre[12], "C"),
            Girone(squadre[5],squadre[9],squadre[11],squadre[14], "D")
            }
    valida tuttavia solo da C++11 (in C++98 non esiste modo per inizializzare un array tramite initialization list).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    Giustooo!!... Grazie 1000

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    e in c++98 come si dovrebbe fare?

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da vicio_93 Visualizza il messaggio
    e in c++98 come si dovrebbe fare?
    Puoi lasciar perdere l'initialization list e mettere tutto nel corpo del costruttore...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    Con la stessa struttura scritta sopra?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    Penso che non posso utilizzare più questa scrittura perchè è come se stessi re-inizializzando gli oggetti.. e non è possibile..

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    codice:
    Campionato::Campionato(){
        squadre{
            "Italia",
            "Germania",
            "Francia",
            "Belgio",
            "Brasile",
            "Argentina",
            "Uruguay",
            "USA",
            "Cile",
            "Spagna",
            "Portogallo",
            "Olanda",
            "Inghilterra",
            "Messico",
            "Colombia",
            "Ghana"
            };
        gironi{
            Girone (squadre[0],squadre[8],squadre[6],squadre[7], "A"),
            Girone (squadre[1],squadre[2],squadre[15],squadre[13], "B"),
            Girone (squadre[3],squadre[4],squadre[10],squadre[12], "C"),
            Girone (squadre[5],squadre[9],squadre[11],squadre[14], "D")
            };
    }
    
    [root@root Mondiali]# g++ main.cpp Campionato.cpp Girone.cpp Partita.cpp Squadra.cpp
    Campionato.cpp: In constructor ‘Campionato::Campionato()’:
    Campionato.cpp:4: error: expected ‘;’ before ‘{’ token
    Campionato.cpp:22: error: expected ‘;’ before ‘{’ token

  9. #9
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ma se tu nel costruttore fai

    codice:
    squadre[0] = "Italia";
    squadre[1] = ...;
    ...
    gironi[0] = Girone(squadre[0],squadre[8],squadre[6],squadre[7], "A");
    ...

    non funziona?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    anche mettendo gironi[0]=Girone(squadre[0],squadre[8],squadre[6],squadre[7], "A"); il tutto non funziona

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 © 2026 vBulletin Solutions, Inc. All rights reserved.