-3
我发现我自己的解决方案。对于这个问题,我感到很抱歉,对于你来说,这并不完全不能满足。
Okey,我的程序中有太多的代码。我正在写一个使用列表的树,我将写。我无法使用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;
时我有一个错误。我的老师告诉我应该使用指向树的内存管理器或地址的指针。你有什么主意吗? P.S.我将来需要30_Mem.h。我应该写我自己的new
,如果我想要做的树类此的任何职能:'树形>儿童=新名单; '如果没有默认的构造函数,怎么处理'新的List'? – Catalina
Еслимненужновопределеннойфункцииклассавыделитьпамятьдля'名单*儿童;'изструктуры'TreeStruct',какмнеэтосделать,еслинетконструкторапоумолчанию。我不知道它是否适合你。 – Catalina
'List * list = new List(this - > _ memory); '('_memory'来自Container.h中的Abstract类)。只有当我在构造函数之前声明实例时,您的解决方案才有效,但这对我来说确实是必需的信息。 Спасибо)))Простомоюпрограммунадовидеть,чтобыполностьюпонять,чтоименнояхотелаузнать – Catalina