2016-01-02 10 views
5

Sto cercando di capire il significato degli errori che generalmente affrontiamo nei programmi C++.Cosa significa? : nota: nessuna conversione nota per l'argomento 1 da 'int' a 'const account &'

Durante la compilazione di un programma che ho ottenuto un errore (ho fatto questo errore intenzionalmente, per favore non dire che il modo di correggere quello) e c'è una nota è presente che è:

note: no known conversion for argument 1 from ‘int’ to ‘const account&’ 

voglio capire il significato di questa nota.

Il mio programma è:

#include<iostream> 
class account 
{ 
    private: 
     int a_no; 
    public: 
     account() 
     { 
      a_no = 0; 
     } 
     void showData() 
     { 
      std::cout<<"\n account number = "<<a_no<<std::endl; 
     } 
}; 
int main() 
{ 
    account a1; 
    a1.showData(); 
    account a2(2); 
    a2.showData(); 
    return 0; 
} 

So che non ho definito un costruttore che può assumere un argomento e fare che rimuoverà il mio errore.

Va bene, durante la compilazione questo ho ottenuto:

file1.cpp: In function ‘int main()’: 
file1.cpp:20:17: error: no matching function for call to ‘account::account(int)’ 
    account a2(2); 
       ^
file1.cpp:20:17: note: candidates are: 
file1.cpp:7:9: note: account::account() 
     account() 
     ^
file1.cpp:7:9: note: candidate expects 0 arguments, 1 provided 
file1.cpp:2:7: note: account::account(const account&) 
class account 
    ^
file1.cpp:2:7: note: no known conversion for argument 1 from ‘int’ to ‘const account&’ 

voglio sapere che cosa è significato di ultima riga file1.cpp:2:7: note: no known conversion for argument 1 from ‘int’ to ‘const account&’?

risposta

3

1) Si sa già che non si dispone di un costruttore che accetta un int. 2) Sai che stai cercando di costruire un account con un int. 3) Se non lo fai, compilatori creeranno copia-costruttori di default, di assegnazione-operatori 4) Il costruttore di copia di default prende un riferimento const per tenere conto

Che cosa succede qui?Poiché esiste solo un costruttore di default e stai costruendo con un parametro il compilatore pensa di voler copiare-costruire. Dato che gli stai dando un int come parametro per il copy-constructor, il compilatore prova a convertire l'int in un account - che non funziona, e te lo dice: "nessuna conversione possibile da int a account"

Questo è molto importante sapere come questa è una fonte di molti bug. Probabilmente non volevi chiamare il copy-constructor. Ma cosa succede se il compilatore trova davvero un modo per convertire il tipo che hai usato come parametro per l'account? Un casino ....

0

classe costruttore è una funzione semplice come come come gli altri, in modo che quando si invia un tipo int alla funzione come parametro, è necessario definire il tipo di parametro per la funzione:

class account 
{ 
    private: 
     int a_no; 
    public: 
     account(int a){ a_no = a; }  
}; 

ora, quando si digita account a2(2); int tipo definito per costruttore e non c'è alcun problema

+0

Questa probabilmente non è la cosa che ho chiesto. –

+0

è il tuo problema !!! leggi di nuovo i tuoi errori @Ayushibhardwaj –

+0

prova a usare il mio codice @Ayushibhardwaj –

1

Voglio sapere qual è il significato dell'ultima riga file1.cpp: 2: 7: nota: nessuna conversione nota per argomento 1 da 'int' a ' const account & '?

In primo luogo, il messaggio che si dica

alcuna funzione di corrispondenza per la chiamata al 'conto :: account (int)'

E ci sono due candidati, il primo è il ctor predefinito, ma

file1.cpp: 7: 9: nota: candidato attende 0 argomenti, 1, a condizione

Il secondo è il ctor copia (implicitamente generato), e il tipo di suo parametro è const account&, ma

file1.cpp: 2: 7: Nota: la conversione non sono noti per argomento 1 da 'int' a 'const account &'

Problemi correlati