2013-03-20 6 views
2

Je reçois une erreur de compilation indiquant que 'left' et 'right' sont ambigus.Erreur de compilation: left ambigu, right ambigu

Ai-je déclaré à gauche, à droite dans le mauvais endroit?

  • Déclarant l'intérieur principal ne permet pas non
  • définition de la fonction principale ci-dessus Déplacement ne permet pas

Comment puis-je résoudre ce problème?

cas de test minimum:

#include <iostream> 
using namespace std; 
int left = 0, right = 0; 
int main() 
{ 
    cout << left; 
    cout << right; 
} 

donne:

prog.cpp: In function ‘int main()’: 
prog.cpp:6:13: error: reference to ‘left’ is ambiguous 
prog.cpp:3:5: error: candidates are: int left 
In file included from /usr/include/c++/4.7/ios:43:0, 
       from /usr/include/c++/4.7/ostream:40, 
       from /usr/include/c++/4.7/iostream:40, 
       from prog.cpp:1: 
/usr/include/c++/4.7/bits/ios_base.h:918:3: error: 
      std::ios_base& std::left(std::ios_base&) 
prog.cpp:7:13: error: reference to ‘right’ is ambiguous 
prog.cpp:3:15: error: candidates are: int right 
In file included from /usr/include/c++/4.7/ios:43:0, 
       from /usr/include/c++/4.7/ostream:40, 
       from /usr/include/c++/4.7/iostream:40, 
       from prog.cpp:1: 
/usr/include/c++/4.7/bits/ios_base.h:926:3: error: 
      std::ios_base& std::right(std::ios_base&) 
+3

Conseils pour l'avenir - construisez [un cas de test minimum] (https://ideone.com/c2DqtQ) et collez le code dans la question, plutôt que simplement un lien vers celui-ci. – Dukeling

+0

Je n'arrive pas à comprendre le formatage du code sur ce site! – user1776433

+0

Maintenant vous savez pourquoi vous ne faites pas 'using namespace std;'! –

Répondre

3

Observer le message d'erreur:

raw.cpp:105: error: reference to ‘right’ is ambiguous 
raw.cpp:5: error: candidates are: int right 
/usr/include/c++/4.2.1/bits/ios_base.h:917: error: 
    std::ios_base& std::right(std::ios_base&) 

Il est intimidant de lire, mais au fond c'est ce qu'il dit:

raw.cpp:105: error: There's more than one ‘right’ here 
One of them is yours: raw.cpp:5 int right 
Another one isn't: <bits/ios_base.h:917>: some crap in namespace ‘std’ 

Donc left et right sont déjà définis dans namespace std, que vous importez tous avec using namespace std. C'est pourquoi vous avez une ambiguïté. Le changement le plus simple à résoudre est de supprimer using namespace std; et d'ajouter using std::cin; using std::cout; mais cela ressemble à trop de variables globales à mon goût. En passant, vous devriez intégrer votre code dans votre question. La question pourrait être ici plus longue que cette pâte, et ma réponse n'aura pas de sens si personne ne peut voir toute la question.

+0

Je ne savais pas à gauche et à droite ont été définis dans l'espace de noms std, j'ai changé ces derniers à lft et à droite. Merci beaucoup. – user1776433

+1

Si vous étiez dans ma classe, je vous laisserais tomber une lettre pour ces nouveaux noms de variables. Que diriez-vous de 'left_index' ou' deque_left'? –

+0

Ou n'utilisez pas 'using namespace std;' mais préfixez les éléments que vous voulez avec 'std ::', ou spécifiez exactement ce que vous importez de 'std'. (Je pense que ':: left' et' :: right' fonctionneraient aussi, je ne suis pas sûr que je recommanderais la notation, cependant.) –