列表中的多个类c ++

时间:2013-01-08 11:29:50

标签: c++ list

  

可能重复:
  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

我在代码中做错了什么吗?需要帮助!

2 个答案:

答案 0 :(得分:0)

代码中存在语法错误(cout << typename)。我不知道你是如何得到链接器错误的。可能根本就没有编译。

否则可以http://ideone.com/PGWGZu

答案 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()

正如你所看到的,通过一些贪污,你可以确定你在这里做错了什么。希望这会有所帮助。