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.


  • Mod

    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 )
    

Anmelden zum Antworten