【发布时间】:2015-06-18 10:37:03
【问题描述】:
我有一个重载运算符
这是来自名为 BTreeLeave 的具体类的方法
bool BTreeLeave::burn() {
csv::WriterStream os("products.txt", std::ios_base::out);
os.set_delimiter(',');
if (os.is_open()) {
os << 1693 << NEWLINE;
os << 15 << 16 << 17 << 20 << NEWLINE;
os << "s" << "i" << "f" << NEWLINE;
os << 2 << NEWLINE;
os << "+" << NEWLINE;
os << "0" << NEWLINE;
}
模板功能就是这个
template<typename T>
typename csv::WriterStream& operator << (typename csv::WriterStream& ostm, const T& val)
{
if(!ostm.get_after_newline())
ostm.get_ofstream() << ostm.get_delimiter();
ostm.get_ofstream() << val;
ostm.set_after_newline(false);
return ostm;
}
template<>
inline csv::WriterStream& operator << (typename csv::WriterStream& ostm, const char& val)
{
if(val==NEWLINE)
{
ostm.get_ofstream() << NEWLINE;
ostm.set_after_newline(true);
}
else
ostm.get_ofstream() << val;
return ostm;
}
我得到的错误是 ‘csv::WriterStream’不是从‘std::basic_ostream’派生的 和 “‘operator
如果我尝试从主函数中调用
【问题讨论】:
-
您在哪里定义了输出运算符重载?它们在全球范围内吗?不在任何类或命名空间中?您能否尝试创建一个Minimal, Complete, and Verifiable Example 向我们展示?
标签: c++ templates csv methods stream