Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55

    [C++] Errore Costruttore

    Ragazzi non capisco dove stia l'errore.. O gli errori..
    L'errore nel particolare caso è
    Girone.cpp: In constructor ‘Girone::Girone(Squadra&, Squadra&, Squadra&, Squadra&)’:
    Girone.cpp:7: error: no match for call to ‘(Squadra) (Squadra&)’
    Girone.cpp:8: error: no match for call to ‘(Squadra) (Squadra&)’
    Girone.cpp:9: error: no match for call to ‘(Squadra) (Squadra&)’
    Girone.cpp:10: error: no match for call to ‘(Squadra) (Squadra&)’
    Girone.cpp:11: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’
    Girone.cpp:12: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’
    Girone.cpp:13: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’
    Girone.cpp:14: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’
    Girone.cpp:15: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’
    Girone.cpp:16: error: no match for call to ‘(Partita) (Squadra&, Squadra&)’

    codice:
     #ifndef GIRONE_H
    #define GIRONE_H
    #include <iostream>
    #include <string>
    #include "Partita.h"
    using namespace std;
    
    class Girone {
    public:
        Girone();
        Girone(Squadra& ,Squadra& ,Squadra& ,Squadra&);
        void Inserisci();
        void Modifica();
        void Classifica();
        void Stampa()const;
        
    private:
        Partita partite [6];
        Squadra squadre [4];
    };
    
    #endif
    
    //Girone.cpp
    
    #include "Girone.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    Girone::Girone(Squadra& a, Squadra& b, Squadra& c, Squadra& d){
        squadre [0](a);
        squadre [1](b);
        squadre [2](c);
        squadre [3](d);
        partite [0](a,d);
        partite [1](b,c);
        partite [2](a,c);
        partite [3](d,b);
        partite [4](b,a);
        partite [5](c,d);
    }
    
    void Girone::Inserisci(){
        char s;
        for (int i=0; i<6; i++){
            if (inserito.partite[i]=false){
                cout<<partite[i]<<endl;
                cout<<"Vuoi inserire questo risultato? s/n";
                cin>>s;
                if (s=='s'){
                    cin>>ris1.partite[i]>>ris2.partite[i];
                    (*s1).Classifica(ris1,ris2);
                    (*s2).Classifica(ris2,ris1);
                    inserito.partite[i]=true;
                }
            }
        }
    }
    
    
    #ifndef SQUADRA_H
    #define SQUADRA_H
    #include <string>
    using namespace std;
    
    class Squadra{
    public:
        Squadra();
        Squadra(Squadra&);
        Squadra(string);
        void Classifica(int,int);
    private:
        string nome;
        unsigned int punti, V, N, P, GF, GS;
    };
    
    #endif
    
    
    #include "Squadra.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    Squadra::Squadra(string a){
        nome=a;
        punti=0;
        V=0;
        N=0;
        P=0;
        GF=0;
        GS=0;
    }
    
    Squadra::Squadra(Squadra& h){
        nome=h.nome;
        punti=0;
        V=0;
        N=0;
        P=0;
        GF=0;
        GS=0;
    }
    
    void Squadra::Classifica(int a, int b){
        GF+=a;
        GS+=b;
        if (a>b){
            punti+=3;
            V+=1;
        }
        else if (a<b){
            P+=1;
        }
        else if (a==b){
            punti+=1;
            N+=1;
        }
    }
    Ultima modifica di MItaly; 18-01-2015 a 16:42

  2. #2
    In girone.h devi includere squadra.h.

    (tra parentesi, il tag [CODE] si chiude con [/CODE], non [\CODE]; ora ho corretto io)
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    L'errore rimane.. E' strano.. Ho provato a fare un'assegnazione invece di utilizzare il costruttore e gli errori alle righe 7-8-9 non ci sono più.. Però io non ho previsto una ridefinizione dell'operatore = per "squadra".. Non riesco a capire cosa non va... Nel costruttore parametrizzato di Girone sto semplicemente inizializzando i membri coi propri costruttori

  4. #4
    Sorry non avevo letto bene... No, non puoi fare in quella maniera, una volta entrati nel costruttore i membri sono già stati inizializzati con il costruttore di default. Per inizializzare i membri di una classe si usa la sintassi dell'initialization list (http://www.learncpp.com/cpp-tutorial...ization-lists/), che però in C++98 non è possibile impiegare per gli array. In C++11, invece, è consentita, come mostrato qui: http://stackoverflow.com/a/2409882/214671
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    Bene Grazie risolto.. E poi perchè nella funzione inserisci di Girone mi dice che inserito.partite[i] non è stato dichiarato in questo scope?

    codice:
     #ifndef PARTITA_H
    #define PARTITA_H
    #include "Squadra.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Partita{    
    public:
        Partita();
        Partita(Squadra&,Squadra&);
        
    private:
        bool inserito;
        int ris1, ris2;
        Squadra *s1, *s2;
    };
    
    #endif

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    55
    Forse ho capito.. si può chiamare il membro di un membro? Per esempio.. La classe girone ha 4 membri partita che ha un membro bool Inserito.. Posso fare la chiamata inserito.partite[0] in un metodo della classe Girone?

  7. #7
    inserito.partite[0]? Semmai partite[0].inserito, ma comunque da lì non ci puoi accedere, dato che l'hai dichiarato come private.
    Amaro C++, il gusto pieno dell'undefined behavior.

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