2012-10-23 3 views
10

ich ein Problem auf, wenn versucht, den folgenden Code kompiliert:Error "xxxx" Namen hat keinen Typen

#include <iostream> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
#include <map> 

using namespace std; 

map<char, int> mapDial; 

mapDial['A'] = 2; 

int main() 
{ 

    cout << mapDial['A'] << endl; 
    return 0; 
} 

Der Compiler gab mir einen Fehler: 'mapdial' Namen hat keinen Typen Fehler. Ich bin neu in C++ und weiß wirklich nicht, was hier vor sich geht. Kann mir hier jemand helfen, das zu lösen? Vielen Dank!!

Antwort

14

Sie können nicht beliebige Ausdrücke im globalen Bereich ausführen, so

mapDial['A'] = 2; 

illegal ist. Wenn Sie C++ 11, können Sie

map<char, int> mapDial { 
    { 'A', 2 } 
}; 

tun, aber wenn Sie nicht tun, werden Sie eine Initialisierungsfunktion von main aufrufen müssen, um es so, wie Sie es wollen einzurichten. Sie können auch in den Konstruktor von map schauen, der einen Iterator benötigt, und diesen mit einem Array in einer Funktion verwenden, um die Karte zu initialisieren, z.

map<char, int> initMap() { 
    static std::pair<char, int> data[] = { 
     std::pair<char, int>('A', 2) 
    }; 

    return map<char, int>(data, data + sizeof(data)/sizeof(*data)); 
} 

map<char, int> mapDial = initMap(); 
+0

Thank you very much! – Lamian

+0

@ user1596792 Wenn dies Ihre Frage beantwortet hat, klicken Sie auf das Häkchen daneben, um es als Antwort zu markieren. –

3

Sie können keine Aussagen wie mapDial['A'] = 2; im globalen Gültigkeitsbereich haben. Sie müssen in einer Funktion sein.

3

Wenn Sie eine Variable im globalen Gültigkeitsbereich deklarieren, dürfen Sie nur eine Initialisierung durchführen. Z. B,

Sie können normale Aussagen wie nicht tun:

a = 9; 

So würde ich mit dem Code beheben:

#include <iostream> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
#include <map> 

using namespace std; 

map<char, int> mapDial; 

int main() 
{ 
    mapDial['A'] = 2; 
    cout << mapDial['A'] << endl; 
    return 0; 
} 
+0

Vielen Dank! – Lamian

Verwandte Themen