PDA

Visualizza la versione completa : [C++]Error: No matching function for call to


flashare
27-01-2010, 20:48
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:



#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 :



#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?! :dhò:

oregon
27-01-2010, 20:51
Ti sta solo dicendo che non esiste un costruttore senza argomenti ...

MacApp
27-01-2010, 20:53
Originariamente inviato da flashare


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).

flashare
27-01-2010, 20:53
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?

c_junior
27-01-2010, 20:55
nella classa CCarta prova a mettere anche un costruttore di default

CCarta(){
//istruzioni
}

-----------
scusate non avevo visto che avevate già risposto!

oregon
27-01-2010, 20:55
Se lo usi, sì.

Ma probabilmente, nel libro c'è ...

flashare
27-01-2010, 20:58
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..

flashare
27-01-2010, 21:00
Trovato io il problema xD
Invece che i < 10 avevo digitato 1 < 10, per cui è andato in loop!
Grazie ugualmente!

Alex-93
30-06-2015, 23:02
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 http://www.tomshw.it/forum/images/smilies/frown.gif. Non riesco proprio a trovare una soluzione :( Grazie.

MItaly
30-06-2015, 23:07
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. :ciauz:

Loading