visual-c++ - Visual C++看不到operator <<重载

我有一个 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)
{
   ..
}
}

但是,如果我想使用这些运算符,Visual C++将返回此错误:
error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'QTextStream' (or there is no acceptable conversion)

我尝试了几件事:
  • 最初,这些方法被定义为模板的好 friend ,并且使用g++可以正常工作。
  • 方法已移至命名空间util
  • 之外
  • 我更改了模板的定义,以适合在各种Visual C++网站上找到的模板。

  • 原始的 friend 声明是:
    friend QTextStream& operator>>(QTextStream& ss, Vector& in) { ... }
    

    “Visual C++适应”版本是:
    friend QTextStream& operator>> <dim,T>(QTextStream& ss, Vector<dim,T>& in);
    

    具有在类之前预先声明并在之后实现的功能。我使用以下方法检查文件是否正确包含:
    #pragma message ("Including vector header")
    

    一切似乎都很好。难道没有人知道什么地方可能出问题吗?

    注意:运算符的定义甚至没有出现在operator

    最佳答案

    我遇到了同样的问题,我想我知道发生了什么事。由于某些原因,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/

    相关文章:

    java - pageFetcher 的问题

    c++ - 这些错误是什么意思? ISOC++禁止分配数组

    c++ - float 到Arduino编译错误

    f# - 具有Powerpack 2.0的F#2.0,fslex错误1

    asp.net - 适用于ASP.NET MVC Q1 2010的Telerik扩展: Not co

    compiler-errors - DevC++中的链接错误不在codepad.org中

    iphone - 错误: expected specifier-qualifier-list bef

    java - 包org.hibernate.cfg不存在导入org.hibernate.cfg.Co

    java - Android ant 编译失败 : java. lang.NoClassDefFou

    c++ - 传递模板参数