首页 > 解决方案 > 模板化后未解决的外部源错误,但我的所有代码当前都在 .h 文件中

问题描述

我看到了一些关于类似主题的其他文章,但我认为我的情况与其他人不同。

我正在为一个学校项目构建一个模板化的链表类,该项目的规则之一是所有代码都必须在 .h 文件中。所以我的所有实现都在我的类定义之下。这是我的类定义,后面是我用于测试的主要方法的一部分。我的方法实现低于主要方法。

#ifndef LIST342_H_
#define LIST342_H_
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

template <typename T>
class List342 {

public:
    
    struct Node {
        T* data;
        Node* next;
    };


    // Constructors and Destructors
    List342();
    List342(const List342& list);
    ~List342();

    bool isEmpty() const;
    bool Insert(T* obj);
    void DeleteList();
    void Print();
    bool Peek(T target, T& result) const;
    bool Remove(T target, T& result);
    bool Merge(List342& list1);
    bool BuildList(string file_name);

    // Overloaded Operators

    friend ostream& operator<< (ostream& stream, const List342& list);
    List342 operator+(const List342& rhs) const;
    List342& operator+=(const List342& rhs);
    List342& operator=(const List342& list);
    bool operator==(const List342& rhs) const;
    bool operator!=(const List342& rhs) const;

    private:
        Node* head_;

};

template <typename T>
int main() {
    // List of my Personal Tests:
    List342<T> List1;
    string* one = new string("can");
    string* two = new string("apple");
    string* three = new string("diamond");
    string* four = new string("block");
    string* five = new string("angel");
    List1.Insert(one);
    List1.Insert(two);
    List1.Insert(three);
    List1.Insert(four);
    List1.Insert(five);

我的所有代码都在一个 .h 文件中,但解决方案资源管理器中有一个空白的 .cpp 文件。如果我删除 .cpp 文件,我将不再收到未解决的外部源错误,但我收到“无法启动程序”错误,并且它说找不到 .exe 文件。我是否错误地实施了模板化?我的程序在模板化之前运行良好。

如果这有帮助,这是我的一些实现,它直接位于我的主要方法下方:

template <typename T>
List342<T>::List342() {
    head_ = nullptr;
}

template <typename T>
List342<T>::List342(const List342& list) {
    *this = list;
}

template <typename T>
List342<T>::~List342() {
    this->DeleteList();
}


template <typename T>
bool List342<T>::isEmpty() const {
    return (head_ == nullptr);
}

标签: c++templates

解决方案


推荐阅读