模板类的非成员模板运算符重载语法

时间:2020-09-05 20:31:24

标签: c++ templates

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

正确的语法是什么,为什么会失败? 通常,执行以下操作的正确方法是什么:

  1. 在模板化类中声明运算符重载。

  2. 在类之外定义运算符重载实现。

  3. 使用方法。

请显示所有三个步骤。 我尝试将static添加到我的函数中以及在网上找到的其他建议,但始终会遇到一个错误或另一个错误。 模板语法绝对不直观。

0 个答案:

没有答案
相关问题