2009-03-13 12 views
0

Les pointeurs présentent des problèmes particuliers pour la résolution de surcharge.Problèmes de pointeur avec surcharge en C++?

Say par exemple,

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

Quel est le problème avec l'appel f (0)? Comment puis-je corriger l'appel de fonction pour f (0)?

Répondre

6

f((int*) 0) ou f((char *) 0)

Mais si vous vous trouvez faire cela, je prendrais un autre regard sur votre conception.

+0

Est-ce parce que les caractères sont représentés par des nombres ou? –

+0

C'est parce que vous ne pouvez pas déduire le type à partir de zéro –

+0

0 signifie null pointeur en C++. Donc, ce pourrait être un int * null ou un caractère nul *. Le compilateur ne peut pas déterminer lequel. – Michael

0

Cast, ou ne l'utilisez pas du tout:

f((int*)0); 
0

Quel est le problème avec l'appel f (0) est la résolution est ambiguë. Vos deux fonctions surchargées prennent un pointeur qui, dans ce cas, ne peut être résolu que par cast.

f((int*)0) 

Selon ce que vous essayez de faire ici, il y a d'autres options qui ne sont pas ambiguës.