C++ map problem
-
Ich hoffe das ihr mir weiter helfen könnt.
Ich habe momentan diesen Compiler Error
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>>>
Error 140 error C2228: left of '.second' must have class/struct/union
Und komme einfach nicht vorran.
Fehler tritt in dieser If Funktion auf....
if( m_defines.insert( make_pair( Token, eNum ) ).second == false )
Die Definition der map:
std::map<string, int> C\1::m_defines;
Und die Deklaration der map:
static map<string, int> m_defines;
Ist im Public Bereich.
Naja, ich bin da momentan am Ende mit meinem Latein.
Wenn ihr noch mehr Infos braucht zögert bitte nicht zu fragen.
-
Welcher Compiler?
-
Visual Studio 2012
-
Poste doch mal ein kleines, vollständiges Beispiel Deines Problems...
-
Es ist leider kein kleiner Quellcode die Datei wo der Fehler auftritt hat c.a 1505 Zeilen nur die 1. Quelldatei sind mehrere.
Aber hier der Bereich wo der Fehler auftritt.
void C\1::PreScan() { int brace = 0; funcIndex = 0; char* p = m_pProg; GetTkn(); if( !strcmp(token,"#") ) { process = COMPILER; } else { process = INTERPRITER; m_pProg = p; } do { if( brace ) return; // bypass code inside functions GetTkn(); if(tok==DEFINE) ExecDefine(); else if(tok==ENUM) { int eNum = 0; GetTkn(); // { do { GetTkn(); GetTkn(); // , or = if(*token=='=') { GetTkn(); // num eNum = atoi(token); GetTkn(); // , } if( m_defines.insert( std::make_pair( Token, eNum ) ).second == false ) TRACE("Enum %s dup.\n", Token); eNum++; } while(*token!='}'); GetTkn(); // ; } else if(tok==INCLUDE) { GetTkn(); CString strFile( token ); CHAR* pOldProg = m_pProg; CHAR* pOldBuf = m_pBuf; int nOldSize = m_nProgSize; m_pProg = m_pBuf = 0; CScanner::Load( strFile ); PreScan(); CScanner::Free(); m_nProgSize = nOldSize; m_pProg = pOldProg; m_pBuf = pOldBuf; tok = 0; } else if(tok==VAR) { // is global var PutBack(); DeclGlobal(); } else if(tokenType==IDENTIFIER) { CString strTemp( token ); GetTkn(); if(*token=='(') { // must be assume a function funcTable[funcIndex].loc = m_pProg; strcpy(funcTable[funcIndex++].name,strTemp); while(*m_pProg!=')') m_pProg++; m_pProg++; // m_pProg points to opening cyrly brace of function } else PutBack(); } else if(*token=='{') brace++; } while( tok != FINISHED ); m_pProg = p; }
-
Ich hab den Fehler so beheben können, aber ob sie korrekt gelöst wurde bin ich mir noch nicht sicher.
if( m_defines.insert( make_pair( (string)Token, eNum ) ).second == false )