2009-03-13 6 views
0

ポインタは、過負荷解決のためのいくつかの特別な問題を提示します。C++でのオーバーロードに関するポインタの問題?

セイF(0)を呼び出すと間違っている何例えば、

void f(int* x) { ... } 
void f(char* x) { ...} 
int main() 
{ 
    f(0); 
} 

? f(0)の関数呼び出しを修正するにはどうすればよいですか?

答えて

6

f((int*) 0)またはf((char *) 0)

しかし、あなた自身がこれをやって見つけた場合、私はあなたのデザインをもう一度見てかかるだろう。

+0

文字は数字または? –

+0

ちょうど0からタイプを推論することができないからです。 –

+0

0はC++のヌルポインタを意味します。つまり、null int *またはnull char *になります。コンパイラはどちらを決定することはできません。 – Michael

0
それをキャスト

、またはまったく使用しないでください。

f((int*)0); 
0

(0)は、fを呼び出すと間違っている何が解像度が曖昧です。両方のオーバーロードされた関数はポインタを受け取ります。この場合、キャストによってのみ解決できます。

f((int*)0) 

ここでは何をしようとしているかによって、あいまいではない他のオプションがあります。

関連する問題