将地图写入文件 - 不匹配'operator<<'

时间:2016-04-24 20:17:52

标签: c++

当我编译我的C ++项目时,我收到一个我不明白的错误。我的错误在以下代码部分中引发: void twogramsToFile(const map< string,int> twogram,const string outputfile){   ofstream myfile(outputfile);   for(auto& x:twogram){     outputfile<< x.first<< " " << x.second<< " \ n&#34 ;; //这一行会导致错误   }   myfile.close(); } 我得到的错误信息是这个: 'operator<<'不匹配(操作数类型是'const string {aka const std :: __ cxx11 :: basic_string< char>}'和'const std :: __ cxx11 :: basic_string< char>') 我以为<< operator是为内置类型定义的。

4 个答案:

答案 0 :(得分:5)

  

我认为<< operator是为内置类型定义的。

它不是右手边的抱怨,而是左手边。您可以从中传输一个const字符串,但是您无法将传输到一个const字符串中。尝试

myfile << ...

答案 1 :(得分:1)

输出到字符串outputFile。你应该这样做:

myfile << ...

答案 2 :(得分:1)

您正在尝试流式传输到const std::string,我怀疑它应该是

myfile << x.first << " " << x.second << "\n";

而不是std::string参数outputfile

此外,您应该通过引用传递std::mapstd::string,以避免不必要的复制,如下所示:

void twogramsToFile(const std::map<std::string, int>& twogram, const std::string& outputfile)

答案 3 :(得分:0)

更改行:

rp3.controller('c1Ctrl', [
    '$scope',
    'xFactory',
    function($scope, xFactory) {

        var layout_url = "json/dashboard/layout/mpu/layout.json";

        xFactory.getJSON(layout_url, function(layout) {// read layout's web
            // service
            $.each(layout, function(i, val) {
                chart.push({
                    "v" : val,
                    "x" : xFactory
                });
                var cType = getChartType(val.chartType);
                // alert(cType);
                drawLayout(parentDIV.name, val.position, val.width,
                        val.height, val.title, val.color, val.bgcolor,
                        buttomCtrl.withCtrl, cType);
                fillLayoutData(xFactory, val.position, val.url, val.height,
                        cType);
            });
        }, function() {
            console.log("Connection! ");
        });
    } ]);

为:

outputfile << x.first << " " << x.second << "\n"; //this line causes the error

BTW,字符串不是C ++中的内置类型