2016-06-19 52 views
-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

回答

1

而不是用于ListInstance默认初始化加ListInstance的初始化构造器

Tree(MemoryManager& mem) :AbstractTree(mem), ListInstance(mem) { 
    //root = new TreeStruct;//root - корень дерева (элемент структуры Дерева) 
    numberOfElements = 0;//кол-во элементов в дереве пока что 0 
} 
+0

,如果我想要做的树类此的任何职能:'树形>儿童=新名单; '如果没有默认的构造函数,怎么处理'新的List'? – Catalina

+0

Еслимненужновопределеннойфункцииклассавыделитьпамятьдля'名单*儿童;'изструктуры'TreeStruct',какмнеэтосделать,еслинетконструкторапоумолчанию。我不知道它是否适合你。 – Catalina

+0

'List * list = new List(this - > _ memory); '('_memory'来自Container.h中的Abstract类)。只有当我在构造函数之前声明实例时,您的解决方案才有效,但这对我来说确实是必需的信息。 Спасибо)))Простомоюпрограммунадовидеть,чтобыполностьюпонять,чтоименнояхотелаузнать – Catalina

相关问题