2016-06-19 51 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

相關問題