2017-12-04 1 views
-1

オーバーロードされた関数のエラー呼び出しが曖昧で、コンパイラがそれらを区別できないためですが、同じパラメータを維持しながらこれを回避する方法はありますか?私は以下に示す宣言を使用する必要があり、毎回このエラーが発生した場合に、その両方をどのように使用できるのか混乱しています。オーバーロードされた関数の呼び出しが曖昧である

問題を引き起こしているコンストラクタを表示するようにコードを短くしました。

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

名前空間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

これは、デフォルトのパラメータを持つ関数とoutを持つ関数の両方がパラメータ呼び出しを持たず、呼び出し先を知らないためです。 –

+0

はい、私はそれを理解していますが、どちらにも妥協することなく回避する方法があります。それは不可能ですか? – Glaz

+2

はnoパラメータを取り除きます –

答えて

4

だけパラメータを取らないコンストラクタを取り除きます。 2番目のコンストラクタは、最初のコンストラクタが行うことのすべてを既に行います。

nullptrを受け取った場合は、それをテストしてローカル変数を設定し、そうでない場合はロジックを続行します。最初のコンストラクタは完全に余分です。

関連する問題