2009-06-02 5 views
1

Je suis en train de compiler un projet C++ en utilisant Microsoft VisualStudio 2008. Ce projet particulier compile bien si vous utilisez Win32 comme plate-forme cible. Si je tente de compiler le même projet pour la plate-forme x64 J'obtiens une erreur C2593 'operator identifier' is ambiguous dans cette ligne:Erreur c2593 (identificateur d'opérateur est ambigu) lors de la compilation pour la plate-forme x64

case 't': os_ << (size_t)path->rnode->char_type;  break; 

Toute personne a un indice pourquoi la même ligne compile très bien pour 32 bits, mais échoue pour 64 bits avec une telle une erreur de haut niveau?

Répondre

2

Ok, j'ai compris. Le problème est le type de données size_t qui a différentes tailles pour les deux plates-formes différentes. L'opérateur < < est défini pour une variété liste des types de données:

StringBuffer& operator<<(unsigned short int n) { _UITOA(n); } 
StringBuffer& operator<<(unsigned int n)  { _UITOA(n); } 

Sur une plate-forme 32 bits « unsigned int » est un match parfait pour size_t. Sur les plates-formes 64 bits size_t est 64 bits et ne correspond exactement à aucune déclaration d'opérateur.

La solution est de choisir l'opérateur exact en utilisant le type de données correct:

case 't': os_ << (unsigned int)path->rnode->char_type;  break; 

ou de surcharge de l'opérateur en utilisant size_t:

StringBuffer& operator<<(size_t)  { _UITOA(n); } 
+0

Ou unsigned long plutôt que size_t –

+1

ou d'une méthode de modèle (Comme ils semblent tous être en train de convertir en chaîne. (PS Vous pouvez utiliser boost :: lexical_cast <>() –

Questions connexes