template <class itemType>
class bNode {
using nodeType = bNode<itemType>;
itemType item;
public:
bNode() = delete;
bNode(itemType _item) : item(_item) {}
itemType getItem() { return item; }
friend const bool operator>(const nodeType& lhs, const nodeType& rhs);
};
template <class itemType>
const bool operator>(const bNode<itemType>& lhs, const bNode<itemType>& rhs) {
//return (lhs.getItem() > rhs.getItem());
return true;
}
它可以正常编译,但是当我像这样从main运行它时却给我链接错误
int main()
{
bItem item1(4);
bItem item2 ;
bNode<bItem> node1(item1);
bNode<bItem> node2(item2);
bool result = node1 > node2;
}
error LNK2019: unresolved external symbol "bool const __cdecl operator>(class bNode<class bItem> const &,class bNode<class bItem> const &)" (??O@YA?B_NABV?$bNode@VbItem@@@@0@Z) referenced in function _main
fatal error LNK1120: 1 unresolved externals
正确的语法是什么,为什么会失败? 通常,执行以下操作的正确方法是什么:
在模板化类中声明运算符重载。
在类之外定义运算符重载实现。
使用方法。
请显示所有三个步骤。 我尝试将static添加到我的函数中以及在网上找到的其他建议,但始终会遇到一个错误或另一个错误。 模板语法绝对不直观。