gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:06:38 25 4
gpt4 key购买 nike

我有一个 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com