2017-08-18 1 views
-2

Quand je lance le code suivant sur ubuntu (gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4)):Pourquoi le code suivant fonctionne-t-il sur ide en ligne (gcc 7.2.0) mais donne une erreur sur ubuntu?

#include<iostream> 
#include<vector> 
#include<list> 
using namespace std; 
int main(){ 
vector <int> v; 
v.push_back(1); 
v.push_back(2); 
v.push_back(3); 
v.push_back(4); 
v.push_back(5); 
list<int> temp; 
for(auto i:v){ 
    cout<<i<<" "; 
    temp.push_back(i); 
} 
for(auto i:temp){ 
    cout<<i<<" "; 
} 
} 


Je reçois les erreurs suivantes:

try.cpp: In function ‘int main()’: 
try.cpp:13:10: error: ‘i’ does not name a type 
for(auto i:v){ 
     ^
try.cpp:17:1: error: expected ‘;’ before ‘for’ 
for(auto i:temp){ 
^ 
try.cpp:17:1: error: expected primary-expression before ‘for’ 
try.cpp:17:1: error: expected ‘;’ before ‘for’ 
try.cpp:17:1: error: expected primary-expression before ‘for’ 
try.cpp:17:1: error: expected ‘)’ before ‘for’ 
try.cpp:17:10: error: ‘i’ does not name a type 
for(auto i:temp){ 
     ^
try.cpp:20:1: error: expected ‘;’ before ‘}’ token 
} 
^ 
try.cpp:20:1: error: expected primary-expression before ‘}’ token 
try.cpp:20:1: error: expected ‘;’ before ‘}’ token 
try.cpp:20:1: error: expected primary-expression before ‘}’ token 
try.cpp:20:1: error: expected ‘)’ before ‘}’ token 
try.cpp:20:1: error: expected primary-expression before ‘}’ token 


Mais quand je cours le code sur l'ide en ligne je fonctionne bien.
Quel est le problème avec le code?
Le lien pour le code sur ligne ide: No errors


+0

Comment compilez-vous sur Ubuntu? –

+0

@MichaelAlbers 'g ++ -o try try.cpp' – user7098526

+0

Vous ne dites pas quelle version de gcc vous utilisez sur Ubuntu (' gcc --version'), mais je parie que c'est assez vieux pour qu'il ne le soit pas supporte les fonctionnalités C++ 11 par défaut. Essayez d'utiliser l'option '-std = gnu ++ 11'. –

Répondre

3

Votre code utilise certains des 11 C++ des fonctionnalités telles que range based loops et auto specifier mais vous ne compilent pas pour le 11 C++ la norme. Vous devez activer le support 11 C++ en incluant le drapeau -std=c++11 lors de la compilation:

g++ -std=c++11 -o try try.cpp 

Le compilateur en ligne a ce permis en utilisant le drapeau -std=gnu++1z.

+0

Merci! cela a aidé – user7098526