如何修复使用不同类型参数调用模板函数的程序



我不知道如何调用一个模板函数,该函数假定以字符串和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()调用它的方式进行编译。

最新更新