Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77

    [C++]Error: No matching function for call to

    Salve a tutti!
    Per esercitarmi nell'utilizzo delle classe e nella programmazione orientata a oggetti ho deciso di realizzare un programma che simuli una partita di carte.
    Per testare il programma, ho cercato di compilarlo dopo aver completato la parte in cui il programma crea un mazzo, lo mescola, pesca dieci carte e le mostra.
    Tuttavia, dopo aver corretto alcuni problemi minori o di sintassi, ne rimane uno che non riesco proprio a correggere, per cui vi chiedo: dov'è questo benedetto errore?!

    Posto innanzitutto il codice.

    Carta.h:

    codice:
    #include <iostream>
    using namespace std;
    
    class CCarta {
       public:
          CCarta(char seme0, int valore0);           //Costruttore
          char getseme() { return seme; };         //Conoscere il seme
          int getvalore() { return valore; };          //Conoscere il valore
          void mostra();
       private:
          char seme;
          int valore;
    };
    
    CCarta::CCarta(char seme0, int valore0)
    {
       seme = seme0;
       valore = valore0;
    }
    
    void CCarta::mostra()
    {
       if(valore == 1)
          cout << "E' un asso";
       else
          cout << "E' un " << valore;
    
       if(seme == 'D')
          cout << " di denara.";
       else if (seme == 'S')
          cout << " di spade.";
       else if (seme == 'C')
          cout << " di coppe.";
       else
          cout << " di bastoni.";
    }
    Carte.cpp :

    codice:
    #include <iostream>
    #include <stdlib.h>
    #include "carta.h"
    using namespace std;
    
    CCarta pesca(CCarta array[]);
    void mescola(CCarta array[]);
    
    int main()
    {
       //Creo mazzo
       CCarta mazzo[39];
       int k = 0;
       int i = 0;
       for(i = 1; i < 11; i++) {
          mazzo[k] = CCarta('D', i);
          k++;
       }
       for(i = 1; i < 11; i++) {
          mazzo[k] = CCarta('S', i);
          k++;
       }
       for(i = 1; i < 11; i++) {
          mazzo[k] = CCarta('B', i);
          k++;
       }
       for(i = 1; i < 11; i++) {
          mazzo[k] = CCarta('C', i);
          k++;
       }
    
       //Mescolo il mazzo
       mescola(mazzo);
    
       //Pesco una mano di dieci carte
       CCarta mano[9];
       for(i = 0; i < 10; i++)
             mano[i] = pesca(mazzo);
    
       //Guardo le carte
       for(i = 0; 1 < 10; i++)
             mano[i].mostra();
    }
    
    CCarta pesca(CCarta array[])
    {
       CCarta temp;
       temp = array[1];
       for(int z = 1; z < 40; z++) {
          if(array[z].getvalore() == 0)
             break;
          array[z-1] = array[z];
          array[z] = CCarta('X', 0);
       };
       return temp;
    }
    
    void mescola(CCarta array[])
    {
       srand(time(NULL));
       CCarta swap;
       int ran;
       int m = 0;
       for(int n = 0; n < 500; n++) {
          ran = rand() % 40;
          swap = array[m];
          array[m] = array[ran];
          array[ran] = swap;
          if(m == 39)
             m = 0;
          else
             m++;
       }
    }
    L'errore, invece, è il seguente:

    carte.cpp: In function ‘int main()’:
    carte.cpp:12: error: no matching function for call to ‘CCarta::CCarta()’
    carta.h:15: note: candidates are: CCarta::CCarta(char, int)
    carta.h:4: note: CCarta::CCarta(const CCarta&)
    carte.cpp:36: error: no matching function for call to ‘CCarta::CCarta()’
    carta.h:15: note: candidates are: CCarta::CCarta(char, int)
    carta.h:4: note: CCarta::CCarta(const CCarta&)
    carte.cpp: In function ‘CCarta pesca(CCarta*)’:
    carte.cpp:47: error: no matching function for call to ‘CCarta::CCarta()’
    carta.h:15: note: candidates are: CCarta::CCarta(char, int)
    carta.h:4: note: CCarta::CCarta(const CCarta&)
    carte.cpp: In function ‘void mescola(CCarta*)’:
    carte.cpp:61: error: no matching function for call to ‘CCarta::CCarta()’
    carta.h:15: note: candidates are: CCarta::CCarta(char, int)
    carta.h:4: note: CCarta::CCarta(const CCarta&)

    Mi aiutate?!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ti sta solo dicendo che non esiste un costruttore senza argomenti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: [C++]Error: No matching function for call to

    Originariamente inviato da flashare
    codice:
    int main()
    {
       //Creo mazzo
       CCarta mazzo[39];
    carte.cpp: In function ‘int main()’:
    carte.cpp:12: error: no matching function for call to ‘CCarta::CCarta()’
    "mazzo" è un array di "CCarta" quindi la necessita del costruttore di default (quello senza argomenti).

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    E quindi?!
    Nel libro che ho io c'è un esempio in cui vi è solo quello necessario, ovvero quello con gli argomenti.
    Va obbligatoriamente inserito anche un costruttore privo di argomenti?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    nella classa CCarta prova a mettere anche un costruttore di default

    CCarta(){
    //istruzioni
    }

    -----------
    scusate non avevo visto che avevate già risposto!
    cogli l'attimo

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Se lo usi, sì.

    Ma probabilmente, nel libro c'è ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    E in quale caso lo uso?
    Nell'array?

    In ogni caso, era effettivamente quello il problema. Non sapevo che l'array costruisse autonomamente con un costruttore senza argomenti.
    Tuttavia, il risultato non è quello che m'aspettavo, diciamo:

    E' un 8 di spade.E' un asso di bastoni.E' un 4 di bastoni.E' un 8 di denara.E' un 4 di coppe.E' un 5 di spade.E' un 2 di coppe.E' un 3 di coppe.E' un 6 di bastoni.E' un 2 di denara.E' un 10 di bastoni.E' un 10 di spade.E' un 10 di denara.E' un 40 di bastoni.E' un -1209774092 di bastoni.E' un -1211119755 di bastoni.E' un 134514208 di bastoni.E' un -1211119755 di bastoni.E' un -1074254076 di bastoni.E' un -1209694696 di bastoni.E' un asso di bastoni.E' un 134513669 di bastoni.E' un 134515792 di bastoni.E' un -1074254120 di bastoni.E' un -956271497 di bastoni.E' un 0 di bastoni.E' un -1208391248 di bastoni.E' un -1208352780 di bastoni.E' un 134514208 di bastoni.E' un 134514241 di bastoni.E' un asso di bastoni.E' un 134515792 di bastoni.E' un -1208412048 di bastoni.E' un -1208365245 di bastoni.E' un -1074252027 di bastoni.E' un -1074252019 di bastoni.E' un -1074251966 di bastoni.E' un -1074251900 di bastoni.

    E così via fino a fermarsi con un "segmentation fault".
    Non riesco ad individuare il problema..

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Trovato io il problema xD
    Invece che i < 10 avevo digitato 1 < 10, per cui è andato in loop!
    Grazie ugualmente!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2015
    Messaggi
    9
    Ragazzi riprendo questa vecchia conversazione visto che codeblocks mi da lo stesso errore. In pratica dopo che compilo il mio codice mi esce quest'errore "error: no matching function for call to ‘MEM::salva(std::vector<DIZIONARIO>)’|" sto da ieri mattina a modificare e capire cosa non va, non so più cosa vedere, purtroppo sono ancora una frana col c++ quindi molte cose non mi vengono semplici come con il c . Non riesco proprio a trovare una soluzione Grazie.

  10. #10
    Il messaggio di errore in questione è abbastanza generico e può dipendere da diverse cose, non starei a dirottare un thread così vecchio. Apri un nuovo thread, specificando anche il codice che dà problemi oltre al messaggio di errore.

    Qui chiudo.
    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.