2

Ich versuche, 10 Lösungen und Projekte auf MSVC++ zu kompilieren, die in MSVC fein gearbeitet ++ 9, und ich habe Probleme mit ihm, vor allem die folgende Meldung erhalten:Fehler C2888 von VC9 Migration auf VC10

Fehler C2888:'std :: hash':

namespace std { 
namespace tr1 { 

template <> 
struct hash<Rubedo::eChannelFamily> 
{ 
    std::size_t operator()(const Rubedo::eChannelFamily& Key) const 
    { 
     return (int) Key; 
    } 
}; 
}} 

ich vollkommen glücklich sein würde, wenn ich cou: Symbol kann nicht innerhalb von Namespace 'tr1'

auf den folgenden Code definiert werden ld einen der folgenden tun:

  • Ändern Sie den Code, um die Fehler zu beheben und sauber zu kompilieren;
  • Erzwingen Sie, dass sich der Compiler wie MSVC++ 9.0 verhält.

Wie würde ich so etwas tun? Vielen Dank im Voraus.

Antwort

3

hash ist in Namespace std in VS2010, da es Teil der C++ 0x Standardbibliothek ist, nicht std::tr1. Entfernen Sie einfach den tr1-Abschnitt und der Compiler sollte in Ordnung sein.

Dies ist eine ziemlich triviale Modifikation eines Hashes, den ich für meinen eigenen Typ habe, der erfolgreich kompiliert.

1

Sie haben unary_function so erben und tr1 wird nicht mehr benötigt,

namespace std 
{ 
     template <> 
     struct hash<Rubedo::eChannelFamily> : public unary_function<Rubedo::eChannelFamily, size_t> 
     { 
      size_t operator()(const Rubedo::eChannelFamily& key) const 
      { 
        return (size_t) key; 
      } 
     }; 
} 
+0

Sie wissen, er angegeben, welche CustomType und // Code in seinem OP ist. – Puppy

+0

@DeadMG: yup. Ich habe YourCustomType durch seinen Typ und Code ersetzt. :-) – Nawaz