0

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

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

我的问题是是否可以在不将 LinkedList 更改为单态的情况下避免此错误(为 IVTEntry 对象交换 T 参数)?请记住,这是 1992 年的 IDE,它没有(至少据我所知)自行安排编译的能力,即它遵循程序结构。

以下是相关的代码:

列表.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

列表.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;
}

静脉血栓栓塞症

#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
4

0 回答 0