gpt4 book ai didi

c++ - 模板类运算符重载多个类型名 C++

转载 作者:行者123 更新时间:2023-11-30 03:21:59 26 4
gpt4 key购买 nike

我在 surf.h 中有以下代码,其中声明了具有两种不同类型的模板类:

using namespace std;    
template <typename T1, typename T2>

class surf;

template <typename T1, typename T2>
ostream & operator << (ostream & str, surf<T1,T2> & ov);

template <typename T1, typename T2>
class surf
{
public:
surf(T1 v1, T2 v2):
v1_(v1),
v2_(v2)
{}

friend ostream & operator << <T1, T2> (ostream & str, surf<T1,T2> & ov);

T1 v1_;
T2 v2_;

};

template <typename T1, typename T2>
ostream & operator << (ostream & str, surf<T1,T2> & ov)
{
str << "("<<ov.v1_<<","<<ov.v2_<<")";
return str;
}

typedef surf<int,double> intSurf;

然后定义了一个新类,其中创建了一个类型为 T 的 vector (在 field.h 中)

   template<typename T>
class field;

template<typename T>
ostream & operator << (ostream & str, const field<T> & ov);

template<typename T>
class field
{
public:

field( int n, T val):
f_(n,val)
{}

friend ostream & operator << <T> (ostream & str, const field<T> & ov);
protected:

vector<T> f_;
};

template<typename T>
ostream & operator << (ostream & str, const field<T> & ov)
{
for(auto &fE: ov.f_)
{
str << fE << endl;
}
return str;
}

typedef field<intSurf> surfField;

在 main.cpp 中我使用了这个字段。

#include "field.h"

int main()
{

surfField a(4, intSurf(2,5));

cout<< a << endl;

return true;
}

我用 g++(5.4 版)编译它并得到以下错误:

在 main.cpp:2:0 包含的文件中:field.h:在“std::ostream& operator<<(std::ostream&, const field&) [with T = surf; std::ostream = std::basic_ostream]’:main.cpp:9:9: 从这里需要field.h:36:7: 错误:“operator<<”不匹配(操作数类型为“std::ostream {aka std::basic_ostream}”和“const surf”) str << fE << endl;

我在做什么?

最佳答案

你错过了一个 const因为你重载了operator <<

template <typename T1, typename T2>
ostream & operator << (ostream & str, const surf<T1,T2> & ov);
// ^^^^^
//...
friend ostream & operator << <T1, T2> (ostream & str, const surf<T1,T2> & ov);
// ^^^^^
//...
template <typename T1, typename T2>
ostream & operator << (ostream & str, const surf<T1,T2> & ov)
// ^^^^^
//...

需要此常量,因为您试图显示来自 const field<T> & ov 的元素

关于c++ - 模板类运算符重载多个类型名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51588740/

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