实在查不到解决方法了,请大家帮忙解惑,编译器是vs2010
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string, size_t> word_count;
string word;
while(cin >> word)
++word_count[word];
for (const auto &w : word_count)
{
cout << w.first << "occurs" << w.second << ((w.second > 1) ? " times" : " time") << endl;
}
return 0;
}
d:\avs\amfc\32\32\main.cpp(12): error C2143: 语法错误 : 缺少“,”(在“:”的前面)
1>d:\avs\amfc\32\32\main.cpp(12): error C2734: “w”: 如果不是外部的,则必须初始化常量对象
1>d:\avs\amfc\32\32\main.cpp(12): error C3531: “w”: 类型包含“auto”的符号必须具有初始值设定项
1>d:\avs\amfc\32\32\main.cpp(13): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\avs\amfc\32\32\main.cpp(14): error C2228: “.first”的左边必须有类/结构/联合
1> 类型是“int”
1>d:\avs\amfc\32\32\main.cpp(14): error C2228: “.second”的左边必须有类/结构/联合
1> 类型是“int”
1>d:\avs\amfc\32\32\main.cpp(14): error C2228: “.second”的左边必须有类/结构/联合
1> 类型是“int”
將:
改為:
即可。
原因:range for loop 是 C++ 11 才出現的,VS2010 不支援此特性。
這個程式看起來是 《C++ Primer 5th》 裡的,這本書要求編譯器起碼支援 C++ 11,而 VS 2010 是顯然不符合的。請您換 VS 2012 以上版本,或直接使用 GCC 4.8+、Clang 3.4+ 等編譯器。
確定vs2010支援這個特性嗎,g++ 4.9.2是沒問題的,要不換vs2012試試看。
問題可能是你現在的編譯器不支援新的c++的版本。換新的vs2012可以,如果嫌麻煩,可以試試dev C++。可以改編譯參數,—std=c++11 或-std=c++14。