我不知道如何调用一个模板函数,该函数假定以字符串和College对象作为main.cpp中的参数。
这是我在LinkedListADT.h:中的模板
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
#include "ListNodeADT.h"
template <class T>
class LinkedList
{
private:
ListNode<T> *head;
int length;
public:
LinkedList(); // constructor
~LinkedList(); // destructor
// Linked list operations
void insertNode(const T &);
bool deleteNode(const T &);
bool searchList(const T &, T &) const;
};
到目前为止,这是我为LinkedListADT.h文件中的搜索函数所写的内容:
template <class T, class S>
bool LinkedList<T, S>::searchList(const S &target, T &dataOut) const
{
bool found = false; // assume target not found
ListNode<T> *pCur;
while (pCur && pCur->getData().getCode() != target){
/*Code to search*/
return found;
}
这是我的main.cpp中的搜索函数,它从头文件中调用searchList,头文件接受用户输入的大学代码。假设使用字符串输入调用searchList,并尝试在链表中找到与大学代码匹配的代码:
void searchManager(const LinkedList<College> &list)
{
string targetCode = "";
College aCollege;
cout << "n Searchn";
cout << "=======n";
while(toupper(targetCode[0]) != 'Q')
{
cout << "nEnter a college code (or Q to stop searching) : n";
cin >> targetCode;
if(toupper(targetCode[0]) != 'Q')
{
if(list.searchList(targetCode, aCollege))
/*Code to display college*/
else
cout << "Not Found";
}
}
cout << "___________________END SEARCH SECTION _____n";
}
我确信这不是在头文件中写入模板函数的方法,因为这也会更改其他模板函数(插入、删除等(的模板。如果有任何关于正确书写的建议,我将不胜感激。谢谢大家!
如何定义一个可以是一个或两个的模板类参数?(来自评论(
您可以使用可变模板来实现这一点,但这不是您所需要的。相反,您需要一个单参数模板类的模板成员函数,如下所示:
template <class T>
class LinkedList
{
//...
public:
//...
template<class S>
bool searchList(const S& target, T& result) const;
};
将函数定义放在类内部更容易,但如果你坚持在类外部定义它,下面是语法:
template<class T>
template<class S>
bool LinkedList<T>::searchList(const S& target, T& result) const
{
//...
}
一旦有了它,就应该按照从main()
调用它的方式进行编译。