実現したいこと
operator=(long long n)とoperator=(const char* n)を同時に実装したいのですが、aに0を代入しようとしたときに以下のようなコンパイルエラーが起きてしまいます。
どうやらポインタとlong longが同じ型であると識別されるため(?)だと考えているのですが、何か良い解決方法はありますか。
発生している問題・エラーメッセージ
error: ambiguous overload for 'operator=' (operand types are 'T' and 'int') a=0; ^ note: candidate: T T::operator=(long long int) T operator=(long long n){a = n;} ^~~~~~~~ note: candidate: T T::operator=(const char*) T operator=(const char* n){a = n[0];}
該当のソースコード
C++
1class T{ 2public: 3 long long a; 4 T operator=(long long n){a = n;} 5 T operator=(const char* n){a = n[0];} 6}; 7 8int main(int argc, char *argv[]) { 9 T a=0; 10 T a=1; 11 return 0; 12}
タイトルで override と書いてますが、overload です。

CとC++は実際には別の言語です。最近多いのですが、C++にしか関係ないのにC/C++と記述するのはやめましょう(タイトルのことです)。
#define NULL 0
についての歴史的経緯についてはよく知りません。nullptrがあっても結局この手の問題は残っているんですね。

回答3件
あなたの回答
tips
プレビュー