c++ - 实在查不到解决方法了,请大家帮忙解惑,编译器是vs2010
PHP中文网
PHP中文网 2017-04-17 11:49:38
0
3
656

实在查不到解决方法了,请大家帮忙解惑,编译器是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”

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
洪涛

將:

cppfor (const auto &w : word_count)
{
    cout << w.first << "occurs" << w.second << ((w.second > 1) ? " times" : " time") << endl;
}

改為:

cppfor (auto w = word_count.cbegin(); w != word_count.cend(); ++w)
{
    cout << w->first << " occurs " << w->second << ((w->second > 1) ? " times" : " time") << endl;
}

即可。

原因: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。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板