可能重复:
Why can templates only be implemented in the header file?
主要课程
int main() {
initCarList();
}
void initCarList() {
List<Car> carList;
Car c1 = Car("Toyota", "Bettle", 5);
carList.add(c1);
Car c2 = Car("Mercedes", "Bettle", 7);
carList.add(c2);
Car c3 = Car("FireTruck", "Large Van", 20);
carList.add(c3);
Car c4 = Car("Puma", "Saloon Car", 10);
carList.add(c4);
}
列出班级
#include "List.h"
#include <iostream>
using namespace std;
template <typename ItemType>
class List {
private:
ItemType itemList[10];
int size;
public:
List();
void add(ItemType);
void del(int index);
bool isEmpty();
ItemType get(int);
int length();
};
template<typename ItemType>
List<ItemType>::List() {
size = 0;
}
template<typename ItemType>
void List<ItemType>::add(ItemType item) {
if(size < MAX_SIZE) {
itemList[size] = item;
size++;
} else {
cout << typename << " list is full.\n";
}
}
我遇到了这些错误
错误3错误LNK2019:未解析的外部符号&#34; public:void __thiscall List :: add(class Car)&#34; (?添加@?$ List @ VCar @@@@ QAEXVCar @@@ Z)在函数中引用&#34; void __cdecl initCarList(void)&#34; (?initCarList @@ YAXXZ)C:\ Users \ USER \ Desktop \ New folder \ DSA_Assignment \ main.obj DSA_Assignment
我在代码中做错了什么吗?需要帮助!
答案 0 :(得分:0)
代码中存在语法错误(cout << typename
)。我不知道你是如何得到链接器错误的。可能根本就没有编译。
答案 1 :(得分:0)
显然你做了因为它不起作用!除了轻浮之外,让我们一点一点地看一下错误信息:
Error 3 error LNK2019: unresolved external symbol
所以这是一个链接错误。链接器正在尝试将单独编译在一起的单元放在一起,但在这种情况下,它找不到external symbol
- 通常是函数或变量名。
"public: void __thiscall List::add(class Worker)" (?add@?$List@VWorker@@@@QAEXVWorker@@@Z)
这是您缺少的功能的完整签名。不幸的是,它的名称是manged,但是根据您正在编写的代码的上下文知识,您应该能够告诉它:
void List::add(Worker)
接下来......
referenced in function "void __cdecl initWorkerList(void)" (?initWorkerList@@YAXXZ) C:\Users\USER\Desktop\New folder\DSA_Assignment\main.obj DSA_Assignment
...告诉你问题发生在哪里,即在它试图链接的代码中,有一个对缺失函数的引用。再次,在解码之后它出现在:
void initWorkerList()
正如你所看到的,通过一些贪污,你可以确定你在这里做错了什么。希望这会有所帮助。