无法创建类的实例(没有默认构造函数)

时间:2016-06-19 10:38:21

标签: c++ class

  

修改

我自己找到了解决方案。我很抱歉这个问题,对你来说并不是完全无法理解的。

哎呀,我的程序中有很多代码。我正在用一个列表写一棵树,我要去写。我无法使用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;时,我有一个错误。我的老师告诉我,我应该使用指向树的内存管理器或地址,可能是。你有什么主意吗? 附:我将来需要30_Mem.h。我应该写自己的new

1 个答案:

答案 0 :(得分:1)

而不是ListInstance的默认初始化,将ListInstance的初始化添加到构造函数

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