c++ - C++ 模板 ID 不匹配任何模板
问题描述
嗨,我正在尝试重载 << 运算符
#include <iostream>
using namespace std;
template <class T, class U>
class Couple
{
public:
T cle;
U valeur;
public:
Couple();
Couple(T, U);
friend ostream &operator<<<>(ostream &, Couple<T, U>);
};
template <class T, class U>
ostream &operator<<(ostream &os, Couple<T, U> Cpl)
{
os << Cpl.cle << " : " << Cpl.valeur << endl;
return os;
}
但它给了我这个错误我在互联网上尝试了一切
在 Couple.cpp:2 包含的文件中,来自 main.cpp:2:Couple.h:在 'class Couple<int, std::__cxx11::basic_string >' 的实例化中:main.cpp:7:28:需要来自这里 Couple.h:14:21: error: template-id 'operator<< <>' for 'std::ostream& operator<<(std::ostream&, Couple<int, std::__cxx11::basic_string >)'不匹配任何模板声明
解决方案
需要提前声明算子模板。例如
// forward declaration for class template
template <class T, class U>
class Couple;
// declaration
template <class T, class U>
ostream &operator<<(ostream &os, Couple<T, U> Cpl);
template <class T, class U>
class Couple
{
...
// friend declaration
friend ostream &operator<<<>(ostream &, Couple<T, U>);
};
// definition
template <class T, class U>
ostream &operator<<(ostream &os, Couple<T, U> Cpl)
{
...
}
推荐阅读
- firebase - 客户特定的 Firebase 存储
- python-3.x - 跟踪异步 aws lambda 调用的状态?
- ios - SwiftUI - 从 ToolbarItem 内的按钮显示警报
- typescript - 使用带有打字稿的 WebDriver JS 上传文件
- plot - 为什么 scilab 显示不一致的行、列维度?
- java - 使用 yyyy/MM/dd simpledateformat 可以将非日期字符串传递给日期
- typescript - 打字稿返回类型取决于对象参数
- python - 编程组合数学(使用 Python)
- python - 尝试使用 openssl 解密 AES-CBC 加密文件时解密错误
- pandas - 是否有使用熊猫查找列中浮点值索引的函数?