我有一个 vector 类,希望能够从QTextStream对象输入/输出。我的 vector 类的前向声明为:
namespace util {
template <size_t dim, typename T>
class Vector;
}
operator<<
定义为:namespace util {
template <size_t dim, typename T>
QTextStream& operator<<(QTextStream& out, const util::Vector<dim,T>& vec)
{
...
}
template <size_t dim, typename T>
QTextStream& operator>>(QTextStream& in,util::Vector<dim,T>& vec)
{
..
}
}
error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'QTextStream' (or there is no acceptable conversion)
friend QTextStream& operator>>(QTextStream& ss, Vector& in) { ... }
friend QTextStream& operator>> <dim,T>(QTextStream& ss, Vector<dim,T>& in);
#pragma message ("Including vector header")
最佳答案
我遇到了同样的问题,我想我知道发生了什么事。由于某些原因,MSVC有时会误将std::endl用作QTextStream中定义的endl(当然,如果您在任何地方“使用命名空间std”,此行为都是适当的)。
另外,我认为MSVC有时会与QTextStream的std::strings(也许是const或地址或类似的东西)混淆。
MSVC往往对重载的const/&变体非常特别,尤其是在可能存在歧义的情况下。我之前在带有一些重载功能的非QT代码中已经看到了这一点。
当然,错误消息只是令人困惑,因此,这可能是我的分析错误。
关于visual-c++ - Visual C++看不到operator <<重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2868113/