gpt4 book ai didi

c++ - 一个简单类模板的c++17中的 friend 流运算符

转载 作者:行者123 更新时间:2023-11-28 04:46:18 25 4
gpt4 key购买 nike

<分区>

我的问题有所不同,因为它与较新版本的 C++ 有关。

这个问题已经被问过here我指的是 this回答。然而,这是在 2009 年提出并回答的,它对于当前的编译器和 C++ 语言版本来说已经过时了。然而;又来了。

我有一个简单的模板类,我想重载流运算符,但在我这里的例子中:我使用的是 Visual Studio 2017 CE v4.6.01055,编译器 c++ 语言功能设置为 ISO C++ Latest Draft Standard (/std:c++latest)简单地说 C++17。我在 x86 Debug模式下构建它。

我已经尝试了上面 Q/A 中的解决方案,但它一直给我编译器错误。

这是简单的类

template<class T>
class Point {
public:
T mX;
T mY;

Point() : mX(0), mY(0) {}
Point( T x, T y ) : mX( x ), mY( y ) {}
Point( T& x, T& y ) : mX( x ), mY( y ) {}
Point( T* x, T* y ) : mX( *x ), mY( *y ) {}

friend operator<<( std::ostream& out, const Point<T>& p );
}

建议指出您应该创建一个名为 specialization 的实例那个模板的 friend 。用户还说你需要把operator<<的声明放上去在类模板声明之上。我试过了;我已经尝试将方法从标题中移到 cpp 中,在它下面,上面;我什至也尝试将定义放在类中,无论我尝试什么;我无法让它正确编译。

我什至找到了这个answer我尝试了那里的模式,但它在 c++17 中仍然失败。至少在这一点上是compiling没有 <>特化和构建失败,但是当我在其中添加它时无法编译。

在 C++17 中,将流运算符作为友元重载到简单类模板的正确语法和/或位置是什么?我不一定是指实际 operator<<() 的语法本身......它必须更多地处理声明和定义的实际放置。我不确定但从我在此处显示的先前答案中发现的唯一语法是关于使其成为特化的部分;那部分对我来说是新的。

编辑

我不知道是什么导致了编译器或链接器错误。声明和定义是相同的。我最终从 const Point<T>& 更改了第二个参数至 Point<T>在声明和定义中编译和构建。然后我继续将它们改回 const Point<T>&现在它可以编译、构建并给我无错误的输出。

这可能是 Visual Studio 中的错误,因为我昨晚才将它更新到最新版本。我不知道是什么原因造成的;但现在已经解决了。

25 4 0
文章推荐: javascript - 流式传输通过 Websocket 接收的大数据文件作为下载
文章推荐: css - 如何使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com