Conflits avec les operator >> et <<

Conflits avec les operator >> et << - C++ - Programmation

Marsh Posté le 11-09-2006 à 20:16:19    

J'essaye de créer des exporteurs d'un mesh vers des fichiers de types différents : .x, .3ds, etc...
 
Le problème, c'est que j'ai défini les operateurs >> et << de cette façon :
 
 
namespace fileX
  {
  istream& operator << ( istream& stream, Mesh& mesh );
  ostream& operator >> ( ostream& stream, const Mesh& mesh );
  }
 
 
namespace file3ds
  {
  istream& operator << ( istream& stream, Mesh& mesh );
  ostream& operator >> ( ostream& stream, const Mesh& mesh );
  }
 
Mais j'ai beau utiliser "using namespace fileX;" dans mon exporteur de fichiers .x, rien n'y fait!
Visual studio me dit qu'il est incapable de savoir lequel des 2 opérateurs >> utiliser.
 
Comment est-ce que je peux contourner ce problème?
 
Merci!

Reply

Marsh Posté le 11-09-2006 à 20:16:19   

Reply

Marsh Posté le 11-09-2006 à 20:30:23    

t'as inversé les signatures

Reply

Marsh Posté le 11-09-2006 à 20:40:03    

Taz a écrit :

t'as inversé les signatures


 
Ah oui c'est possible  :lol:
 
Enfin bon j'ai tapé ça à l'arrache, je ne bosse pas sur le même PC.
 
Sinon pas d'idée?  :(


Message édité par akalash47 le 11-09-2006 à 20:41:23
Reply

Marsh Posté le 11-09-2006 à 20:47:01    

Code :
  1. #include <iostream>
  2. struct Foo { };
  3. namespace Bar {
  4.   std::ostream & operator<<(std::ostream &os, const Foo & )
  5.   {
  6.     return os << 42;
  7.   }
  8. }
  9. namespace Baz {
  10.   std::ostream & operator<<(std::ostream &os, const Foo & )
  11.   {
  12.     return os << 69;
  13.   }
  14. }
  15. int main()
  16. {
  17.   Foo f;
  18.   {
  19.     using namespace Bar;
  20.     std::cout << f << '\n';
  21.   }
  22.   {
  23.     using namespace Baz;
  24.     std::cout << f << '\n';
  25.   }
  26. }

Reply

Marsh Posté le 11-09-2006 à 21:27:38    

Non justement, ça ne marche précisément pas!

Reply

Marsh Posté le 11-09-2006 à 21:29:59    

ben si.

Reply

Marsh Posté le 11-09-2006 à 21:40:11    

Enfin, c'est plus subtil que ça : j'obtiens une ambiguité DANS le namespace :
 

Code :
  1. #include <iostream>
  2. struct Mesh
  3.   {
  4.   MeshSubset subset;
  5.   };
  6. namespace file3ds
  7.   {
  8.   std::ostream & operator <<  (std::ostream &os, const MeshSubset& subset )
  9.     {
  10.     return os << "3ds susbset exported";
  11.     }
  12.   std::ostream & operator <<  (std::ostream &os, const Mesh& mesh )
  13.     {
  14.     return os << "3ds mesh and " << mesh.subset; // conflit ici : operateur ambigü
  15.     }
  16.   }
  17. namespace fileX
  18.   {
  19.   std::ostream & operator <<  (std::ostream &os, const MeshSubset& subset )
  20.     {
  21.     return os << "x susbset exported";
  22.     }
  23.   std::ostream & operator <<  (std::ostream &os, const Mesh& mesh )
  24.     {
  25.     return os << "x mesh and " << mesh.subset; // conflit ici : operateur ambigü
  26.     }
  27.   }
  28. int main( )
  29.   {
  30.   Mesh m;
  31.   using namespace fileX;
  32.   std::cout << m << std::endl;
  33.   }
  34. }

Reply

Marsh Posté le 11-09-2006 à 22:39:45    

paye toi un vrai compilo ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed