-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