2016-01-02 6 views
5

Ich versuche die Bedeutung der Fehler zu verstehen, denen wir normalerweise in unseren C++ - Programmen gegenüberstehen.Was bedeutet das? : Hinweis: keine bekannte Konvertierung für Argument 1 von 'int' nach 'const account &'

Beim Kompilieren ein Programm, das ich einen Fehler bekam (ich diesen Fehler haben, absichtlich bitte sagen Sie nicht, dass, wie das korrigieren) und eine Notiz vorhanden ist, das ist:

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

Ich möchte verstehen, die Bedeutung dieser Notiz.

Mein Programm ist:

#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; 
} 

Ich weiß, dass ich nicht einen Konstruktor definiert, die ein Argument nehmen und das zu tun wird meine Fehler entfernen.

Okay, während das Kompilieren ich habe:

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&’ 

Ich möchte wissen, was der letzten Zeile wird, was bedeutet file1.cpp:2:7: note: no known conversion for argument 1 from ‘int’ to ‘const account&’?

Antwort

3

1) Sie wissen bereits, dass Sie keinen Konstruktor haben, der ein int dauert. 2) Sie wissen, dass Sie versuchen, Konto mit einem Int zu erstellen. 3) Wenn Sie es nicht tun, Compiler Standardkopie-Konstrukteure, Zuordnung-Betreiber 4) Der Standard-Copy-Konstruktor nimmt eine konstante Referenz erstellen

So zu erklären, was hier geschieht?Da es nur einen Standardkonstruktor gibt und Sie mit einem Parameter konstruieren, denkt der Compiler, dass Sie ihn kopieren wollen. Da Sie ihm einen int als Parameter für den Kopierkonstruktor geben, versucht der Compiler das int in ein Konto zu konvertieren - was nicht funktioniert, und er sagt Ihnen: "keine Konvertierung von int zu account möglich"

Dies ist sehr wichtig zu wissen, da dies eine Quelle für viele Fehler ist. Sie wollten den Copy-Konstruktor wahrscheinlich nicht aufrufen. Aber was passiert, wenn der Compiler wirklich eine Möglichkeit findet, den Typ, den Sie als Parameter verwendet haben, in den Account zu konvertieren? Ein Durcheinander ....

0

Klasse Konstruktor ist eine einfache Funktion wie wie wie andere, so, wenn Sie einen int-Typ der Funktion als Parameter senden, müssen Sie Parametertyp für die Funktion definieren:

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

jetzt, wenn Sie account a2(2); Typ Int-Typ für Konstruktor definiert und es gibt kein Problem

+0

Dies ist wahrscheinlich nicht das, was ich gefragt habe. –

+0

es ist dein problem !!! lese deine Fehler nochmal @Ayushibhardwaj –

+0

versuche es einfach mit meinem Code @Ayushibhardwaj –

1

Ich möchte wissen, was die letzte Zeile file1.cpp bedeutet: 2: 7: Hinweis: keine bekannte Konvertierung für Argument 1 von 'int' bis ' const Konto & '?

Zuerst wird die Nachricht sagen Sie

keine passende Funktion für Aufruf von 'Konto :: Konto (int)'

Und da sind zwei Kandidaten, ist die erste der Standard ctor, aber

file1.cpp: 7: 9: Anmerkung: Kandidaten 0 Argumente erwartet, 1 bereitgestellt

Die zweite ist die Kopie Ctor (implizit erzeugt) und die Art seiner Parameter ist const account&, aber

file1.cpp: 2: 7: beachten Sie: es gibt keine Konvertierung für Argument 1 von 'int' zu 'const account &'

Verwandte Themen