我正在尝试在 C++ 中重载一些运算符。它们需要重载,因为我创建了一个模板二叉搜索树,它进行了大量的相等性检查,而且我的数据对象不是整数或字符串,而是日期。
我让日期操作员工作得很好。我对它们进行了测试,它们每次都在测试中工作(不是在树中,而是在主对象中)。然而,似乎我跳了枪,二叉搜索树就不会使用它们。现在经过进一步搜索,很多消息来源都说我制作运营商的方式是错误的。
我得到的错误是(没有链接到一行代码):
1>DataStore.obj : error LNK2019: unresolved external symbol "bool __cdecl operator==(class Date const &,class Date const &)" (??8@YA_NABVDate@@0@Z) referenced in function "public: void __thiscall BinarySearchTree<class Date>::insert(class Date const &)" (?insert@?$BinarySearchTree@VDate@@@@QAEXABVDate@@@Z)
1>DataStore.obj : error LNK2019: unresolved external symbol "bool __cdecl operator>(class Date const &,class Date const &)" (??O@YA_NABVDate@@0@Z) referenced in function "public: void __thiscall BinarySearchTree<class Date>::insert(class Date const &)" (?insert@?$BinarySearchTree@VDate@@@@QAEXABVDate@@@Z)
1>Z:\Dropbox\University\ICT209 - Data Structures\Assignment2\StockDataTree\Debug\StockDataTree.exe : fatal error LNK1120: 2 unresolved externals
好吧,这些是我里面的运营商Date.h
:
friend bool operator==(const Date &date1, const Date &date2);
friend bool operator!=(const Date &date1, const Date &date2);
friend bool operator<(const Date &date1, const Date &date2);
friend bool operator<=(const Date &date1, const Date &date2);
friend bool operator>(const Date &date1, const Date &date2);
friend bool operator>=(const Date &date1, const Date &date2);
以下是它们如何在以下应用中使用的示例Date.cpp
:
inline bool operator==(Date &date1, Date &date2)
{
return
(
date1.getDay() == date2.getDay() &&
date1.getMonth() == date2.getMonth() &&
date1.getYear() == date2.getYear()
);
}
inline bool operator!=(const Date &date1, const Date &date2)
{
return !(date1 == date2);
}
(我的二叉搜索树基于C++ Programming: Program Design Include Data Structures中的一个)
这是树模板中的代码示例,用于说明为什么我的自定义运算符不起作用:(const elemType 将是我的日期对象)
BinarySearchTree.h
<-- 这是一个模板
template <class elemType>
void BinarySearchTree<elemType>::insert(const elemType& insertItem)
{
nodeType<elemType> *current;
nodeType<elemType> *trailCurrent;
nodeType<elemType> *newNode;
newNode = new nodeType<elemType>;
newNode->info = insertItem;
newNode->lLink = NULL;
newNode->rLink = NULL;
if (root == NULL)
root = newNode;
else
{
current = root;
while (current != NULL)
{
trailCurrent = current;
if (current->info == insertItem)
{
............
编辑:这棵树也可以作为int
or正常工作string
,没有问题。
BinarySearchTree<int> test;// this works
BinarySearchTree<string> test;// this works too
问题仅在我将树与我自己的日期类一起使用时。
BinarySearchTree<Date> test;// this does not work
Date 类运算符也在树中工作,main.cpp
但不在树中。
Date tmp(12,12,2000);
Date tmp2(12,12,2000);
cout << (tmp == tmp2) << endl; // this works fine too