2015-03-01 5 views
0

Когда я пытаюсь создать этот код, он показывает ошибки! , и я не знаю, как его решить !!Какая ошибка в этом коде?

ошибка C3531: 'х': символ, тип которого содержит 'автомобиль' должен иметь инициализатор
ошибка C2143: синтаксическая ошибка: отсутствующий '' перед ':'

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <string> 
#include <map> 
#include <cctype> 
using namespace std; 

    int main(){ 
ifstream in("input.txt"); 
ofstream out("output.txt"); 
string s; 
int line=0; 
vector<string> vec(1,"dummy"); 
multimap<int,int> M; 

while(getline(in, s)){ 
    line++; 
    vec.push_back(s); 
    if(line%12==10){ 
     string temp=""; 
     for(auto x:s) if(isdigit(x)) temp+=x; 
     int key = stoi(temp); 
     M.insert(make_pair(key,line));  
    } 
} 

auto it = M.rbegin(); 
while(it != M.rend()){  
    int i = it->second; 
    int start = (int(i/12))*12 +1; 
    for(int j=1; j<=12; j++) out << vec.at(start++) << "\n";   
    it++; 
} 


in.close(); 
out.close();  
return 0; 
} 
+1

Какую версию визуальной студии вы используете? Похоже, это тот, который не поддерживает диапазон на основе 'for'. – Praetorian

+0

Это 2010? !! так как я могу это решить ?! – Kurd

+2

Обновление до VS2012 или более поздней версии. Или прекратите использование диапазонов на основе 'for' петель – Praetorian

ответ

1

МС VC++ 2010 не поддерживает стандартный синтаксис для диапазона, основанного на цикле. Но он поддерживает следующий синтаксис:

for each (auto x in s) if(isdigit(x)) temp+=x; 

Таким образом, это является причиной ошибок компиляции.

+0

_ + 1: _ Глупый Microsoft ([ссылка] (https://msdn.microsoft.com/en-us/library/) ms177202.aspx)) –

1

Поскольку VS2010 не поддерживает синтаксис, просто использовать предварительно C++ 11 Синтаксис:

if(line%12==10){ 
    string temp=""; 
    for (std::string::const_iterator iter=s.begin(); iter!=s.end(); ++iter) 
     if (isdigit(*iter)) temp += *iter; 
    int key = stoi(temp); 
    M.insert(make_pair(key,line));  
} 

или, может быть:

if (line%12 == 10) { 
    int key = 0; 
    for (std::string::const_iterator iter=s.begin(); iter!=s.end(); ++iter) 
     if (isdigit(*iter)) key = (key * 10) + (*iter - '0'); 
    M.insert(make_pair(key, line)); 
} 

и избавиться от временной последовательности и stoi

Смежные вопросы