【问题标题】:How to Iterate to type: mimeType如何迭代输入:mimeType
【发布时间】:2015-03-31 05:49:18
【问题描述】:

您好,我在 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”左值绑定到“std::basic_ostream&&” /usr/include/c++/4.6/ostream:581:5: 错误:初始化 âstd::basic_ostream<_chart _traits>& std::operator&&, const 的参数 1 _Tp&) [with _CharT = char, _Traits = std::char_traits, _Tp = ORTB::MimeType]â

【问题讨论】:

  • 1. if 是完全多余的。 2. 错误不是来自迭代,而是来自cerr &lt;&lt; … 行。我们需要更多的上下文来判断是什么原因造成的。但是MimeType&lt;&lt; 运算符的定义似乎是错误的,因为流在​​某处被转换为const&amp;
  • 我注释掉了 for 循环中的每一行,但同样的错误。 ORTB::MimeType 来自对象 Banner,我只需要一种方法来获取对象并将其转换为字符串。

标签: c++


【解决方案1】:

在第 5 行,您声明了一个 mime 向量,因此第 6 行应该是 mimes.push_back (mime),或者如果您希望向量包含字符串,您应该将第 5 行更改为 std::vector&lt;std::string&gt;。请注意,对 mime.toString () 的调用要求 toString 是 ORTB::MimeType 的成员。

对于涉及 ostream 运算符 (mime 是ORTB::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。

【讨论】:

  • 我把它放在 struct 里面,上面写着:error: âstd::ostream& ORTB::MimeType::operator
  • 结构很简单,我添加了toString(): struct MimeType { MimeType(const std::string & type = "") : type(type) { } //添加了std::string ToString () const { 返回 std::string(type); } std::string 类型; //int 值; };
  • @DavidChange 那是我的错:对于成员函数,MimeType 的第二个参数是隐式的。我已经修复了这个例子。随着对母校的更多反思,我认为最好使用选项#2 并将其定义在结构之外(可能在结构的定义之下)。原因是成员函数并没有完全扩展 ostream 运算符,而是在结构之外定义它。
  • @LanM 它是一个.h 文件,我把它放在结构之外,其他类中有很多其他错误,它是如何导致的?在结构中没有第二个参数的情况下,您在哪里修复它?
  • @LanM 这是一个 .h 文件,我在 ostream 中输出什么?
猜你喜欢
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2013-02-20
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多