• Ich hoffe das ihr mir weiter helfen könnt.

    Ich habe momentan diesen Compiler Error

    Code
    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
                argument types are: (std::pair<ATL::CStringT<char, StrTraitMFC<char, ATL::ChTraitsCRT<char>>>, int>)
                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....

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

    Die Definition der map:

    Code
    std::map<string, int> CScript::m_defines;

    Und die Deklaration der map:

    Code
    static map<string, int>        m_defines;

    Ist im Public Bereich.

    Naja, ich bin da momentan am Ende mit meinem Latein.

  • Zitat von dowhile;315349

    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

  • Ein Objekt von ATL::CStringT ist ein "char", also ein einzelnes Zeichen, ein Byte?
    Du meinst eher ein char Array, oder?

    Du musst eben dafür sorgen, dass Token ein std::string ist ... Denn der Datentyp wird erwartet.

  • typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;

    Danke dir, bin heute sowieso nicht ganz klar im Kopf

    Jedoch gebe ich die ja genau die passenden Datentypen weiter.

    String und Interger.

    Seems to be fixed, hoffe ich mal.

  • Zitat von dowhile;315349

    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:

    Zitat

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

    Müsste gehen.

  • Zitat von Crasy;315374

    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.

    Code
    if( !m_defines.insert( map<string, int>::value_type( Token, eNum ) ).second == false )
    Code
    Error    140    error C2228: left of '.second' must have class/struct/union
    Code
    642    IntelliSense: no instance of constructor "std::pair<_Ty1, _Ty2>::pair [with _Ty1=const std::string, _Ty2=int]" matches the argument list
                argument types are: (CString, int)
    Code
    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 )

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


    Ist dieser Code nun der "Richtige"? Wäre für jede Hilfestellung sehr dankbar!

    Diese Nachricht detoniert innerhalb der nächsten 24 Stunden!

    Mit freundlichen Grüßen,

    John.

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

  • Zitat von Crasy;315740

    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.

  • Zitat von 0xFFFF;315741

    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

  • Zitat von Crasy;315743

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

    Okay, danke dir. Bleibt nur noch mein Problem mit der fxc.exe

    Scheint wohl ein verdammtes Linker Problem zu sein.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!