2016-03-31 19 views
2

Bir std::map doldurmaya çalışıyorum, ancak 2 derleyici hataları alıyorum ve nedenini bilmiyorum. std :: map - C++ tüm bildirimler için bir tür belirtici gerektirir

std::map<std::string, std::string> dirFull; 
dirFull["no"] = "north"; 
dirFull["so"] = "south"; 
dirFull["ea"] = "east"; 
dirFull["we"] = "west"; 
dirFull["nw"] = "north-west"; 
dirFull["ne"] = "north-east"; 
dirFull["sw"] = "south-west"; 
dirFull["se"] = "south-east"; 

olanlar

hataları şunlardır: Ben de denedim

error: C++ requires a type specifier for all declarations 
     dirFull["no"] = "north"; 
    ^
error: size of array has non-integer type 'const char[3]' 
     dirFull["no"] = "north"; 
       ^~~~ 


bu:

std::map<std::string, std::string> dirFull = { 
    {"no", "north"}, {"so", "south"}, 
    {"ea", "east"}, {"we", "west"}, 
    {"ne", "north-east"}, {"nw", "north-west"}, 
    {"se", "south-east"}, {"sw","south-west"} }; 

Bu hatanın tam bir farklı türü ile sonuçlanır:

error: non-aggregate type 'std::map<std::string, std::string>' (aka '...') cannot be initialized with an initializer list 
std::map<std::string, std::string> dirFull = { 
           ^  ~ 
+0

@TonyD Ben using namespace std 'kullanıyorum eklemeyi unuttuğu;' – user5759490

+2

Ardından, bu atlanmış albümü başka kritik bir şey var olasıdır. Lütfen asılsız ve kısaltılmamış kodu en az bir örnek olarak ekleyin. –

+0

'ü # saydınız mı? – Rakete1111

cevap

6

Bu hatayı alıyorsunuz çünkü dosya kapsamındaki ifadeleri çalıştırmaya çalışıyorsunuz. Bu atamaları bir işlevde tanımlayın ve artık bu hataları almayacaksınız. Eğer statik başlatma süresi boyunca bu map doldurmak istiyorsanız

, bunu yapmak boost::assign veya constexpr başlatma sözdizimini kullanabilirsiniz.

//requires c++11: 
const map <string,string> dirFull = { 
    {"no", "north"}, 
    {"so", "south"}, 
    {"ea", "east"}, 
    {"we", "west"}, 
    {"nw", "north-west"}, 
    {"ne", "north-east"}, 
    {"sw", "south-west"}, 
    {"se", "south-east"}, 
}; 
+0

olamaz (aka '>, char_traits , karakter ayırıcı, char_traits, basic_string map') Bir başlatıcı listesi ile başlatılan 'bu C++ 11 kullanmıyor mu demek? – user5759490

+0

@ user5759490 probalby, derleyici seçeneklerinizi kontrol edin –

+1

Evet, öyle, '-std = C++ 11 '(' g ++ 'veya' clang ++ ') eklediğinizden emin olun, –

İlgili konular