【发布时间】:2022-01-16 12:16:53
【问题描述】:
我正在尝试像这样在类外定义我的运算符重载:
template <typename Type>
class myClass
{
...
friend std::ostream& operator << (std::ostream&, const myClass&);
friend std::istream& operator >> (std::istream&, myClass&);
...
}
template <typename Type>
std::ostream& myClass<Type> :: operator << (std::ostream& out, const myClass<Type>& other) { ... }
template <typename Type>
std::istream& myClass<Type> :: operator >> (std::istream& in, myClass<Type>& other) { ... }
我的问题是我收到一条错误消息,说“类模板 class 没有成员 operator”,我不明白这是如何发生的或为什么会发生.
【问题讨论】:
-
成员函数 != 命名空间范围函数。
myClass中的friend声明用于全局函数,但您正试图将它们实现为成员函数。尝试在实现中删除myClass<Type> ::。 -
另外,你在类声明之后缺少
;,但我认为这只是一个复制粘贴错误。 -
如果我从声明中删除 myClass
它会给我一个链接器错误,是的,复制粘贴错误,忘记了 ;类声明后
标签: c++ templates operator-overloading function-definition friend-function