嗨我在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]â
答案 0 :(得分:0)
在第5行,你要声明一个mimes向量,所以第6行应该是mimes.push_back (mime)
,或者如果你想让向量包含字符串,你应该将第5行更改为std::vector<std::string>
。请注意,对mime.toString ()
的调用要求toString是ORTB :: MimeType的成员。
对于涉及ostream运算符(&lt;&lt;)的错误,您需要为编译器提供一种将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。