如何迭代输入:mimeType

时间:2015-02-01 00:30:23

标签: c++

嗨我在ORTB中有一个mimeType,但无法通过编译,无论如何迭代banner.mimes并将其转换为字符串?

cerr << "banner.mimes:" << banner.mimes.empty() << endl;
if (!banner.mimes.empty()){
    for(auto & mime : banner.mimes) {
       cerr << "banner.mime:" << mime << endl;
       std::vector<ORTB::MimeType> mimes;
       mimes.push_back(mime.toString());
       ctx.br->segments.add("mimes", mimes);
    }
}

它说:错误:无法将âstd::basic_ostreamâlvalue绑定到âstd:: basic_ostream&amp;&amp;â /usr/include/c++/4.6/ostream:581:5:错误:初始化âstd:: basic_ostream&lt; _CharT,_Traits&gt;&amp;的参数1 std :: operator&lt;&lt;(std :: basic_ostream&lt; _CharT,_Traits&gt;&amp;&amp;,const _Tp&amp;)[with _CharT = char,_Traits = std :: char_traits,_Tp = ORTB :: MimeType]â

1 个答案:

答案 0 :(得分:0)

在第5行,你要声明一个mimes向量,所以第6行应该是mimes.push_back (mime),或者如果你想让向量包含字符串,你应该将第5行更改为std::vector<std::string>。请注意,对mime.toString ()的调用要求toString是ORTB :: MimeType的成员。

对于涉及ostream运算符(&lt;&lt;)的错误,您需要为编译器提供一种将MimeType转换为与ostream兼容的内容的方法。我将假设mimeORTB::MimeType类型的对象,但如果不是,则只需要插入相应的类。 有两种方法可以做到这一点:ORTB::MimeType的成员函数:

namespace ORTB {
    class MimeType {
    // Class definition...
    public:
    std::ostream& operator<< (std::ostream& stream) {
    // output MimeType's information here: return stream << Value1 << Value2...; 
    }
}

如果您无法访问ORTB::MimeType的定义,则可以在更全球范围内创建类似的功能:

    std::ostream& operator<< (std::ostream& stream, const MimeType& mt) {
    // output MimeType's information here: return stream << mt.Value1 << mt.Value2...; 
    }

请注意,使用选项#2,您需要公开访问您输出的任何内容。理想情况下,您的数据将被指定为私有,因此您必须使用公共getter。