c++ - 模板化后未解决的外部源错误,但我的所有代码当前都在 .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);
}
解决方案
推荐阅读
- reactjs - 以同步方式集成两个反应函数
- javascript - Node/Webpack 4 - 如何使用根域
- string - 从第一个字符到最后一个字符的 TextBox 字符串到 ListBox
- android - 在 android 4.4.2 版本上获取 net::ERR_CONNECTION_REFUSED (http://localhost:8080)
- python - 在 Keras 中形成多输入 LSTM
- python - 使用 scipy.integrate.nquad 实现数值积分
- google-bigquery - 以增量方式将数据从 GCP Datastore 移动到 BigQuery 的最佳做法
- angular - 是否可以获取服务的实例 ID?
- java - 硬币翻转模拟:计数正面/反面
- bash - 使用命令查找和复制,但使用带有名称的 list.txt