2012-06-12 9 views
11

Hoy Apple actualiza las herramientas de línea de comandos para Xcode y luego actualiza clang de 318.0.58 a 318.0.61.lista de inicializadores en Clang

He intentado usar la lista de inicializadores, pero no puedo compilar debajo del código.

#include <iostream> 
#include <random> 
#include <initializer_list> 

int main() 
{ 
    std::mt19937 rng(time(NULL)); 

    std::initializer_list<double> probabilities = 
    { 
     0.5, 0.1, 0.1, 0.1, 0.1, 0.1 
    }; 

    std::discrete_distribution<> cheat_dice (probabilities); 

    int a[6] = { }; 

    for (int i = 0 ; i != 1000; ++i) 
    { 
     ++a[cheat_dice(rng)]; 
    } 

    for (int i = 0; i != 6; ++i) 
    { 
     std::cout << i + 1 << "=" << a[i] << std::endl; 
    } 
} 

Luego, traté de compilar.

registro de errores

foo.cpp:9:10: error: no member named 'initializer_list' in namespace 'std' 
    std::initializer_list<double> probabilities = 
    ~~~~~^ 
foo.cpp:9:33: error: expected '(' for function-style cast or type construction 
    std::initializer_list<double> probabilities = 
          ~~~~~~^ 
foo.cpp:9:35: error: use of undeclared identifier 'probabilities' 
    std::initializer_list<double> probabilities = 
           ^
foo.cpp:10:5: error: expected expression 
    { 
    ^
foo.cpp:14:46: error: use of undeclared identifier 'probabilities' 
    std::discrete_distribution<> cheat_dice (probabilities); 
              ^
5 errors generated. 

Por otro lado, puedo compilar el código anterior con gcc-4.7.1-RC-20120606.

$ g++ -std=c++11 foo.cpp 

¿Apple no tiene soporte para la lista de inicializadores? versión Clang:

$ clang++ -v 
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin11.4.0 
Thread model: posix 

Respuesta

11

Try especificando -std=c++0x (como @jweyrich de manifiesto acertadamente) como parte de la línea de comandos clang. El valor predeterminado para clang es el modo C++ 98. Las listas de inicializadores son una característica de C++ 11.

Además, del clang C++ 98 y C++ 11 support page puede verificar el estado de varias características nuevas estándar de C++. Por ejemplo, las listas de inicializadores están disponibles en 3.1 (y más arriba).

+0

sonido metálico de Apple no puede reconocer '-std = C++ 11' – user1214292

+1

@ user1214292: Reconoce' -std = C++ 0x' sin embargo. – jweyrich

+0

@jweyrich Pero el resultado no se modificará :( – user1214292

7

de compilación con el comando:

clang++ -stdlib=libc++ -std=c++0x foo.cpp 

Tenga en cuenta que también funciona -std=c++11. En mi máquina, ejecutando:

$ clang --version 

resultados en:

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin12.2.0 
Cuestiones relacionadas