2012-02-06 13 views
6

C++ 11 norma 8.5.4 Przykładowy wykaz initializtion powiedzieć:lista błędów inicjalizacji kompilacji

std::map<std::string,int> anim = { {"bear",4}, {"cassowary",2}, {"tiger",7} }; 

Ale próbowałem VC10, gcc 4.6 i Comeau, żaden z tych kompilator pozwoli to przejść? Dlaczego ?

+4

standard C++ 11 jest bardzo nowy, nie wszystkie kompilatory i biblioteki obsługują jeszcze wszystkiego. –

+6

GCC 4? 5, 4.6 i 4.7 kompilują to, jeśli podasz '-std = C++ 0x'. – Mat

+0

[Works] (http://ideone.com/37oqu) dla mnie na gcc 4.5.1. Jaki jest błąd, który otrzymujesz? Być może nie włączyłeś '-std = C++ 0x'? –

Odpowiedz

3

Dzięki za wszystkie odpowiedzi w komentarzach.

Potem sprawdziłem standard C++ 98 i 03, a tak, 8.5.4 jest zdecydowanie nową sekundą w C++ 11! Dlatego nie jest w pełni obsługiwany przez wszystkie kompilatory.

Po dodaniu flagi -std = C++ 0x z gcc 4.6.1 teraz kompiluje się dobrze.

Dodawanie kodu testowego do niczego, którzy mogą potrzebować odniesienie:

#include <map> 
#include <string> 
#include <initializer_list> 
#include <iostream> 

using namespace std; 
int main() 
{ 
    std::map<std::string,int> collection = {{"bear",4}, {"cassowary",2}, {"tiger",7}}; 
    for(auto it: collection) 
     std::cout << it.first << " has value " << it.second << std::endl; 
    return 0; 
} 
+0

@TomGarske: dzięki za przypomnienie rodzaju, po prostu zrobił :) – Gob00st

Powiązane problemy