修改
我自己找到了解决方案。我很抱歉这个问题,对你来说并不是完全无法理解的。
哎呀,我的程序中有很多代码。我正在用一个列表写一棵树,我要去写。我无法使用STL库。30_Contaner.h:
#pragma once
#include "Container_5_30.h"
#include "Tree.h"
#include "List.h"
using std::cout;
using std::cin;
class Tree : public AbstractTree
{//Cathy
protected:
struct ListStruct{
void* key;
size_t size;
ListStruct* next;
};
//Iterator *globalIterator;
class List : public AbstractList{
public:
/*some code*/
List(MemoryManager& mem) :AbstractList(mem){//constructor
}
virtual ~List(){
}
//some functions
};
struct TreeStruct{
TreeStruct *parent;
//OneLinkedList* Children = new OneLinkedList;
List *Children;//error
void *elem;
size_t size;
int childIndex;
};
int numberOfElements;
bool globalBoolForRecursion;
//TreeStruct *TreeStructInstance = new TreeStruct;
List *ListInstance = new List;//error
public:
Tree(MemoryManager& mem) :AbstractTree(mem) {
//root = new TreeStruct;//root - корень дерева (элемент структуры Дерева)
numberOfElements = 0;//кол-во элементов в дереве пока что 0
}
//some functions
};
main.cpp中:
#include "30_Container.h"
#include "30_Mem.h"
#include "Tree.h"
//********************************
void main(){
Mem mem(100);
Tree tree(mem);
//some code
}
30_Mem.h
#pragma once
#include "MemoryManager.h"
// Простейший менеджер памяти, использует ::new и ::delete
class Mem : public MemoryManager
{
public:
Mem(size_t sz) :MemoryManager(sz) {}
void* allocMem(size_t sz) { return new char[sz]; }
void freeMem(void* ptr) { delete[] ptr; }
};
AbstractTree,MemoryManager和AbstractList类中的所有方法都是虚拟的。我应该在Tree类中获取List类的实例。但是,我有一个问题:我没有List的默认构造函数,当然,当我写List *list = new List;
时,我有一个错误。我的老师告诉我,我应该使用指向树的内存管理器或地址,可能是。你有什么主意吗?
附:我将来需要30_Mem.h。我应该写自己的new
答案 0 :(得分:1)
而不是ListInstance的默认初始化,将ListInstance的初始化添加到构造函数
Tree(MemoryManager& mem) :AbstractTree(mem), ListInstance(mem) {
//root = new TreeStruct;//root - корень дерева (элемент структуры Дерева)
numberOfElements = 0;//кол-во элементов в дереве пока что 0
}