Edit:Невозможно создать экземпляр класса (конструктор не по умолчанию)
Я нашел решение самостоятельно. Прошу прощения за этот вопрос, который для вас не был полностью недостаточным.
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 классов являются виртуальными. Я должен получить экземпляр класса List внутри класса Tree. Но у меня есть проблема: у меня нет конструктора по умолчанию для List и, конечно, когда я пишу List *list = new List;
У меня есть ошибка. Мой учитель сказал мне, что я должен использовать указатель на менеджер памяти дерева или адрес, может быть. Есть ли у вас какие-либо идеи? P.S. Мне нужно 30_Mem.h в будущем. Я должен писать мой собственный new
, если я хочу сделать в любой из функций класса Tree этого: 'tree-> Дети = новый список ; 'Что делать с' new List', если нет конструктора по умолчанию? – Catalina
Если мне нужно в определенной функции класса выделить память для 'List * Children;' из картин 'TreeStruct', как мне это сделать, если нет конструктора по умолчанию. Я же не могу конструктор класса дерево вызвать. – Catalina
'List * list = new List (this -> _ memory); '(' _memory' из класса Abstract в Container.h). Ваше решение работает только в том случае, если я объявляю экземпляр перед конструктором, но для меня это действительно необходимая информация. Спасибо))) Просто мою программу надо видеть, чтобы полностью понять, что именно я хотела узнать – Catalina