如何对类模板方法执行运算符重载

How to do an operator overload for a class template method

提问人:KenshinLink 提问时间:5/19/2023 更新时间:5/19/2023 访问量:64

问:

尝试在类的 cpp 文件中重载运算符时,我无法避免错误。我尝试了许多变体,但无法获得正确的语法。

目前我有这个,它有一个错误“在函数返回类型中推导出类类型'TreeSet'”。

// cpp file
template <typename T>
TreeSet TreeSet<T>::operator+(const TreeSet &other) {}

该函数被声明为 this,其中类是类型名称为 T 的模板。我也不允许更改头文件中的任何内容。

// header file
TreeSet operator+(const TreeSet &other);

我尝试为返回类型和/或参数指定模板类型,但两者都没有提供解决方案。

C++ Templates 运算符重载

评论

2赞 user17732522 5/19/2023
TreeSet -> TreeSet<T>在类外定义的返回类型中

答:

1赞 carraro 5/19/2023 #1

编译器无法在函数的返回类型中推断类类型“TreeSet”,因为缺少模板参数“T”。

你只需要这样做:

template <typename T>
TreeSet<T> TreeSet<T>::operator+(const TreeSet &other) {
    // Your implementation here
}