重载模板类中的运算符<<
Overloading operator << in a template class
很
抱歉,如果这个问题已经准备好了,但我读了很多问题,考虑到在模板类中重载这个运算符,但我还没有找到像我这样的特殊情况。
这是我的代码:
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
template <typename T>
class Class
{
T x;
public:
friend ostream& operator << (const Class<T>&, ostream& out);
};
template <typename T>
ostream& operator << (const Class<T>&, ostream& out)
{
return (out << out.x << endl);
}
int main()
{
Class<short> object;
cout << object << endl;
}
我在最后一行收到此错误:错误 1 错误 C2679:二进制"<<":未找到采用类型为"Class"的右操作数的运算符(或者没有可接受的转换) g:\ucenje\objektno orijentirano programiranje\template3\template3\main.cpp 25 1 模板3
1. std::ostream
应该是operator<<
的第一个参数,所以
template <typename T>
ostream& operator << (const Class<T>&, ostream& out)
应该是
template <typename T>
ostream& operator << (ostream& out, const Class<T>& c)
2.您将operator<<
定义为模板函数,但friend ostream& operator << (const Class<T>&, ostream& out);
指向非模板函数,则应将其更改为
friend ostream& operator<< <T>(ostream& out, const Class<T>& c);
并在类的声明之前添加一些前向声明:
template <typename T>
class Class;
template <typename T>
ostream& operator << (ostream& out, const Class<T>& c);
直播1
或者,您可以在类的定义中将operator<<
定义为非模板函数。
template <typename T>
class Class
{
T x;
public:
friend ostream& operator<< (ostream& out, const Class<T>& c)
{
out << c.x << endl;
return out;
}
};
直播2
operator<<
函数的参数已切换,应该是例如
friend ostream& operator << (ostream& out, const Class<T>&1);
所有二元运算符的左侧始终是第一个参数,右侧是第二个参数。
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板