C++, map problem.

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • C++, map problem.

      Ich hoffe das ihr mir weiter helfen könnt.

      Ich habe momentan diesen Compiler Error

      Quellcode

      1. IntelliSense: no instance of overloaded function "std::map<_Kty, _Ty, _Pr, _Alloc>::insert [with _Kty=std::string, _Ty=int, _Pr=std::less<std::string>, _Alloc=std::allocator<std::pair<const std::string, int>>]" matches the argument list
      2. argument types are: (std::pair<ATL::CStringT<char, StrTraitMFC<char, ATL::ChTraitsCRT<char>>>, int>)
      3. object type is: std::map<std::string, int, std::less<std::string>, std::allocator<std::pair<const std::string, int>>>



      Und komme einfach nicht vorran.

      Fehler tritt in dieser If Funktion auf....

      Quellcode

      1. if( m_defines.insert( make_pair( Token, eNum ) ).second == false )


      Die Definition der map:

      Quellcode

      1. std::map<string, int> CScript::m_defines;


      Und die Deklaration der map:

      Quellcode

      1. static map<string, int> m_defines;


      Ist im Public Bereich.

      Naja, ich bin da momentan am Ende mit meinem Latein.
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • dowhile;315349 schrieb:

      Token ist Instanz von ATL::CStringT, die Map speichert aber str::string?


      Token ist Instanz von ATL::CStringT richtig, ach... das Token ist dann im Endeffekt dann ein char Datentyp ist und die Map es nicht speichern kann. Wenn ich richtig liege.

      Hab es nochmal versucht als Char speichern zu lassen, ist aber der gleiche Error der Map
    • dowhile;315349 schrieb:

      Token ist Instanz von ATL::CStringT, die Map speichert aber str::string?


      Prinzip egal, es kann nur zu Konvert fehlern kommen allerdings nicht zu richtigen Errors.

      Versuch mal das:
      if( !m_defines.insert( map<string, int>::value_type( Token, eNum ) ) )


      Müsste gehen.
    • Crasy;315374 schrieb:

      Prinzip egal, es kann nur zu Konvert fehlern kommen allerdings nicht zu richtigen Errors.

      Versuch mal das:


      Müsste gehen.


      Danke für deine Antwort, jedoch ergeben sich durch deinen Code 3 Fehler.

      Die momentanige If Abfrage sieht so aus.

      Quellcode

      1. if( !m_defines.insert( map<string, int>::value_type( Token, eNum ) ).second == false )


      Quellcode

      1. Error 140 error C2228: left of '.second' must have class/struct/union


      Quellcode

      1. 642 IntelliSense: no instance of constructor "std::pair<_Ty1, _Ty2>::pair [with _Ty1=const std::string, _Ty2=int]" matches the argument list
      2. argument types are: (CString, int)


      Quellcode

      1. Error 139 error C2665: 'std::pair<_Ty1,_Ty2>::pair' : none of the 4 overloads could convert all the argument types



      Der Error ist verschwunden jedoch bin ich mir nicht sicher ob die Methode korrekt war

      if( m_defines.insert( make_pair( (string)Token, eNum ) ).second == false )
    • Crasy;315740 schrieb:

      Halt Halt Halt, gib mal die Einstellungen des Projects, ist es Unicode oder Multibyte? wenn Unicode dann änder das auf Multibyte. :o


      Das Projekt verwendet bereits den Multibyte Zeichensatz, ich konnte den Fehler auch mit dem Code beheben.


      if( m_defines.insert( make_pair( (string)Token, eNum ) ).second == false )

      Nur bin ich mir momentan noch nicht sicher ob mir das später dann nicht nochmal Probleme bereiten wird.
    • 0xFFFF;315741 schrieb:

      Das Projekt verwendet bereits den Multibyte Zeichensatz, ich konnte den Fehler auch mit dem Code beheben.


      if( m_defines.insert( make_pair( (string)Token, eNum ) ).second == false )

      Nur bin ich mir momentan noch nicht sicher ob mir das später dann nicht nochmal Probleme bereiten wird.


      Mach das "== false" weg und mach ganz vorne ein ! hin, is kürzer. :p