无法提供我自己的类作为List <t>参数(类未定义)</t>

时间:2015-01-11 15:29:08

标签: c++ borland-c

首先,IDE(如果它可以被称为IDE)我使用的是从1992年开始的BC 3.1,所以很多人可以而且应该避免这个问题。

现在,我的问题是我已经创建了一个多态的LinkedList类,并且它编译时没有错误。但是,如果我将LinkedList对象与我自己的类声明为该类中的一个paremeter&#39;头文件我收到编译错误Undefined structureSize of 'data' is unknown or zero。我知道这个错误背后的原因 - 在使用IVTEntry作为类参数声明LinkedList对象时,对象IVTEntry的大小是未知的。

我的问题是,如果可以避免此错误而不将LinkedList更改为mono-morphic(更换IVTEntry对象的T参数)?请记住,这是1992 IDE,并且它(至少我不知道)没有自己安排编译的能力,即它遵循程序结构。

以下是相关的代码:

LIST.H

#ifndef _LIST_DEF.H_
#define _LIST_DEF.H_
template <class T>
class ListElem {
private:
    T data;
    ListElem* next;
public:
    ListElem(T input);
    ~ListElem();
    void link(ListElem* nextElem);
        ListElem* getNext();
};
template <class T>
class LinkedList {
private:
    ListElem<T>* head;
    int count;
public:
    LinkedList(T head);
    ~LinkedList();
    void add(T data);
    void add(ListElem(T) node);
    void remove(int entry);
    ListElem<T>* pop();
    ListElem(T>* getHead();
}
#endif

LIST.CPP

#include "list.h"
template <class T>
ListElem<T>::ListElem(T data) {
    this->data = data;
}
template <class T>
ListElem<T>::~ListElem() {
    delete this->data;
    this->next=0;
}
template <class T>
void ListElem<T>::link(ListElem<T>* node) {
    this->next = node;
}
template<class T>
ListElem<T>* ListElem<T>::getNext() {
    return this->next;
}
template <class T>
LinkedList<T>::LinkedList(ListElem<T>* head) {
    this->head = head;
    this->head->link(0);
}
template <class T>
LinkedList<T>::LinkedList(T data) {
    this->head = new ListElem<T>(data);
    this->head->link(0);
}
template <class T>
LinkedList<T>::~LinkedList() {
    while(head != 0) {
        ListElem<T>* temp = head;
        head=head->getNext();
        delete temp;
    }
}
template <class T>
void LinkedList<T>::add(ListElem<T>* node) {
    if(this->head == 0) {
        this->head = node;
        this->head->link(0);
        return;
    }
    ListElem<T>* current = this->head;
    while(current->getNext() != 0) {
        //looking for the last one
        current = current->getNext();
    }
    current->link(node);
    node->link(0);
}
template <class T>
void LinkedList<T>::remove(int entry) {
    if(this->head ==0 || entry < 0) {
        return;
    }
    if(entry == 0) {
        ListElem<T>* temp = this->head;
        this->head = this->head->getNext();
        delete temp;
        return;
    }
    ListElem<T>* current = this->head;
    int i = 1;
    while(current !=0) {
        if(i == entry) {
            break;
        }
        i++;
        current = current->getNext();
    }
    if(i < count) {
        if(current->getNext() != 0 && current->getNext()->getNext() != 0) {
            ListElem<T>* temp = current->getNext();
            current.link(current->getNext()->getNext();
            delete temp;
        }
    }
}
template <class T>
ListElem<T>* LinkedList<T>::pop() {
    ListElem<T>* node = head;
    if(head != 0) {
        head = head->getNext();
    }
    return node;
}
template <class T>
ListElem<T>* LinkedList<T>::getHead() {
    return head;
}

IVT.H

#ifndef _IVT_DEF_
#define _IVT_DEF_
#include "main_eve.h"
class IVTEntry {
    friend class MainEvent;
private:
    short entryNumber;
    MainEvent* event;
    void interrupt (*routine)(...);
public:
    IVTEntry(short eventNo, void interrupt (*routinedef)(...));
    ~IVTEntry();
    short getEntryNumber();
    IVTEntry* getEntry(short eventNo);
    void interrupt (*original)(...);
    static LinkedList<IVTEntry> *eventList;
};
#endif

0 个答案:

没有答案