2017-12-04 5 views
-1

Ich bekomme den Fehler Aufruf der überladenen Funktion ist mehrdeutig und ich verstehe es, weil der Compiler nicht zwischen ihnen unterscheiden kann, aber gibt es eine Möglichkeit, um dies zu umgehen, während die gleichen Parameter beibehalten? Ich muss die Erklärungen verwenden, die ich unten gegeben habe, und es verwirrt mich, wie ich sie beide verwenden kann, wenn ich diesen Fehler jedes Mal traf.Aufruf von überladenen Funktionen ist mehrdeutig

Ich habe meinen Code gekürzt, um die Konstruktoren anzuzeigen, die das Problem darstellen.

ErrorMessage.h

class ErrorMessage { 
     char* message_; //pointer that holds the address of the message stored in current object 
    public: 
     ErrorMessage(); 
     explicit ErrorMessage(const char* errorMessage = nullptr); //receive address of a C-style nullterminate string holding an error message 
} 

ErrorMessage.cpp

Namespace sict {

ErrorMessage::ErrorMessage() { 
    message_ = nullptr; 
} 

ErrorMessage::ErrorMessage(const char* errorMessage) { 
    if(errorMessage == nullptr) { 
     message_ = nullptr; 
    } 
    else { 
     message(errorMessage); 
    } 
    const char* ErrorMessage::message() const { 
     return message_; 
    } 
} 
+3

Das ist, weil die Funktion mit dem Standardparameter und der mit out keinen Parameteraufruf haben kann und würde nicht wissen, –

+0

zu benennen Ja verstehe ich das, aber gibt es einen Workaround für diesen, ohne irgendeinen Kompromiss, oder ist ist es nicht möglich? – Glaz

+2

loswerden der no-Parameter –

Antwort

4

einfach den Konstruktor entfernen, die keine Parameter annimmt. Der zweite Konstruktor macht bereits alles, was der erste Konstruktor tut.

Wenn es ein nullptr erhält, testet es es und setzt die lokale Variable, wenn es nicht mit seiner Logik fortfährt. Der erste Konstruktor ist völlig überflüssig.

Verwandte Themen