【发布时间】:2020-10-27 02:19:39
【问题描述】:
我不知道如何调用模板函数,该函数假定将字符串和 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 Search\n";
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";
}
我确信这不是在头文件中编写模板函数的方法,因为这也会更改其他模板函数(插入、删除等)的模板。我将不胜感激有关正确编写它的方法的任何建议。谢谢大家!
【问题讨论】:
-
此问题显示的代码不符合 stackoverflow.com 对 minimal reproducible example 的要求。这意味着这里的任何人都不太可能最终回答这个问题。但最多只能猜测。你应该edit你的问题来展示一个最小的例子,不超过一两页代码(“最小”部分),其他人都可以剪切/粘贴、编译、运行和重现所描述的问题(“ reproducible”部分)完全如图所示(这包括任何辅助信息,例如程序的输入)。请参阅How to Ask 了解更多信息。
-
@SamVarshavchik 抱歉,我刚刚编辑了帖子。现在它应该包含需要回答的最少信息。
-
你的函数有什么问题?
-
你的头部定义了一个模板类,它只有一个参数,而不是两个。
-
@Eugene 我不能通过传递 (string, college) 在我的 main 中调用模板 searchList 函数,因为它说两个参数都需要是 College 对象。我不确定我的模板是否需要更改,或者我对 main 中的 searchList 函数的调用是否需要更改。我只是想知道如何在我的主文件中调用 searchList。
标签: c++ templates types function-call function-templates