对函数的未定义引用(在二进制搜索树中)C++
undefined reference to function (in binarysearch tree) c++
// Subsetted from:
// Created by Frank M. Carrano and Tim Henry.
// Copyright (c) 2013 __Pearson Education__. All rights reserved.
/** @file BinarySearchTree.cpp */
#include <iostream>
#include "BinarySearchTree.h"
// PRIVATE HELPER METHODS - IMPLEMENT THESE
template<typename ItemType, typename KeyType>
BinarySearchTree<ItemType, KeyType>::BinarySearchTree() : rootPtr(nullptr)
{
}
template<typename ItemType, typename KeyType>
BinarySearchTree<ItemType, KeyType>::~BinarySearchTree()
{
if(rootPtr!=nullptr)
{
this->destroyTree(rootPtr); // Call inherited method
rootPtr=nullptr;
}
} // end destructor
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::destroyTree(BinaryNode<ItemType>* subTreePtr)
{
if(subTreePtr->getLeftChildPtr()!=nullptr)
{
destroyTree(subTreePtr->getLeftChildPtr());
}
if(subTreePtr->getRightChildPtr()!=nullptr)
{
destroyTree(subTreePtr->getRightChildPtr());
}
delete subTreePtr;
subTreePtr=nullptr;
}
template<typename ItemType, typename KeyType>
BinaryNode<ItemType>* BinarySearchTree<ItemType,KeyType>::insertInorder(BinaryNode<ItemType>* subTreePtr, BinaryNode<ItemType>* newNode)
{
BinaryNode<ItemType>* ptr=nullptr;
if(subTreePtr==nullptr)
{
return newNode;
}
if(newNode->getItem() > subTreePtr->getItem())
{
ptr=insertInorder(subTreePtr->getRightChildPtr(), newNode);
subTreePtr->setRightChildPtr(ptr);
}
else if(newNode->getItem() < subTreePtr->getItem())
{
ptr=insertInorder(subTreePtr->getLeftChildPtr(), newNode);
subTreePtr->setLeftChildPtr(ptr);
}
return subTreePtr;
}
template<typename ItemType, typename KeyType>
BinaryNode<ItemType>* BinarySearchTree<ItemType, KeyType>::findNode(BinaryNode<ItemType>* subTreePtr, const KeyType& target) const
{
if(subTreePtr=nullptr)
{
return subTreePtr;
}
else if(target>subTreePtr)
{
findNode(subTreePtr->getRightChildPtr(), target);
}
else if(target<subTreePtr)
{
findNode(subTreePtr->getLeftChildPtr(), target);
}
else
{
return subTreePtr;
}
}
//////////////////////////////////////////////////////////////
// PUBLIC METHODS BEGIN HERE
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// Public BinaryTreeInterface Methods Section - IMPLEMENT THESE
//////////////////////////////////////////////////////////////
template<typename ItemType, typename KeyType>
bool BinarySearchTree<ItemType, KeyType>::add(const ItemType& newEntry)
{
BinaryNode<ItemType>* ptr=new BinaryNode<ItemType>(newEntry);
rootPtr=insertInorder(rootPtr, ptr);
return false;
}
template<typename ItemType, typename KeyType>
ItemType BinarySearchTree<ItemType, KeyType>::getEntry(const KeyType& aKey) const throw(NotFoundException)
{
return findNode()->getItem();
}
template<typename ItemType, typename KeyType>
bool BinarySearchTree<ItemType, KeyType>::contains(const KeyType& aKey) const
{
if(findNode(rootPtr, aKey)==nullptr)
{
return false;
}
else
{
return true;
}
}
//////////////////////////////////////////////////////////////
// Public Traversals Section - IMPLEMENT THESE
//////////////////////////////////////////////////////////////
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::inorderTraverse(BinaryNode<ItemType>* subTreeptr)
{
if(subTreeptr!=nullptr)
{
inorderTraverse(subTreeptr->getLeftChildPtr());
print(subTreeptr);
inorderTraverse(subTreeptr->getRightChildPtr());
}
}
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::preorderTraverse(BinaryNode<ItemType>* subTreeptr)
{
if(subTreeptr!=nullptr)
{
print(subTreeptr);
preorderTraverse(subTreeptr->getLeftChildPtr());
preorderTraverse(subTreeptr->getRightChildPtr());
}
}
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::postorderTraverse(BinaryNode<ItemType>* subTreeptr)
{
if(subTreeptr!=nullptr)
{
postorderTraverse(subTreeptr->getLeftChildPtr());
postorderTraverse(subTreeptr->getRightChildPtr());
print(subTreeptr);
}
}
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::print(BinaryNode<ItemType>* subTreeptr)
{
cout<<subTreeptr->getItem().getword()<<" "<<subTreeptr->getItem().getdefn()<<endl;
}
template<typename ItemType, typename KeyType>
BinaryNode<ItemType>* BinarySearchTree<ItemType, KeyType>::getrootPtr()
{
return rootPtr;
}
/*void testAdds(BinarySearchTree<DictionaryEntry, std::string> dictionary)
{
}
void testRemoves(BinarySearchTree<DictionaryEntry, std::string> dictionary)
{
}
void testWriteToFile(BinarySearchTree<DictionaryEntry, std::string> dictionary)
{
}*/
我一直在尝试解决此问题,但我不知道,请帮忙!!谢谢。我正在尝试做的是使用二叉搜索树的字典,错误是
Executive.o:在函数
BinarySearchTree<DictionaryEntry, std::string>::inorderTraverse(BinaryNode<DictionaryEntry>*)': /home/chen/Desktop/Lab10/BinarySearchTree.cpp:132: undefined reference to
BinarySearchTree::p rint(BinaryNode(' Executive.o:在函数BinarySearchTree<DictionaryEntry, std::string>::preorderTraverse(BinaryNode<DictionaryEntry>*)': /home/chen/Desktop/Lab10/BinarySearchTree.cpp:142: undefined reference to
BinarySearchTree::p rint(BinaryNode(' Executive.o:在函数BinarySearchTree<DictionaryEntry, std::string>::postorderTraverse(BinaryNode<DictionaryEntry>*)': /home/chen/Desktop/Lab10/BinarySearchTree.cpp:155: undefined reference to
BinarySearchTree::p rint(BinaryNode*(' collect2:错误:ld 返回 1 个退出状态 制造: *** [Lab10] 错误 1
请帮忙,非常感谢更新:即使我删除 print(( 方法,它也会产生完全相同的错误。因此,我们可以认为程序甚至无法在我的二进制搜索树类中找到我的"print(("方法,这真的很奇怪,我确实在我的头文件中声明了这个方法。
看看postorderTraverse
的定义
template<typename ItemType, typename KeyType>
void BinarySearchTree<ItemType, KeyType>::postorderTraverse(BinaryNode<ItemType>* subTreeptr)
现在看看你对print
的定义
template<typename ItemType, typename KeyType>
void print(BinaryNode<ItemType>* subTreeptr)
看到区别了吗?您在void
之后但在print
之前缺少BinarySearchTree<ItemType, KeyType>::
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 测试树是否为二进制搜索树
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 二进制搜索树没有匹配的函数调用
- 二进制搜索树不变的标头文件
- 二进制搜索树插入带参数参考
- 搜索非二进制树C 的功能
- 将一个不充实的二进制搜索树转换为完整的二进制搜索树
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 二进制搜索树插入垃圾数据
- 二进制搜索树构造的麻烦
- 将二进制搜索树导出到.csv文件
- 检查节点是否是二进制搜索树的根
- 在二进制搜索树中删除节点
- 简单的二进制搜索树非递归添加功能
- 二进制搜索树的数组实现
- 如何从二进制搜索树中删除节点
- 我如何扭转二进制搜索树
- 递归获取二进制搜索树的高度