C ++模板 - 没有合适的默认构造函数

时间:2014-03-01 19:52:03

标签: c++ templates constructor polymorphism

My End的目标是为函数创建字符串映射,允许将任何组件添加到具有给定字符串的对象中。 我通过告诉每个组件它属于哪个对象并且可以生效来分配组件。

模板声明:

template<typename T> BaseComponent * createInstance(Object* object) {return new T;}

ObjectManager构造函数:

   ObjectManager::ObjectManager()
{
    componentMap["ReadComponent"]  = &createInstance<ReadComponent>;
    componentMap["WriteComponent"] = &createInstance<WriteComponent>;
}

组件添加:

    bool ObjectManager::Addcomponents(string ComponentType, int objectNumber)
{
    if (ComponentMap.find(componentType) != ComponentMap.end())
    {
        Objects.at(objectNumber)->Components.push_back(ComponentMap["ReadComponent"](&Objects.at(objectNumber)->object));
        return true;
    }
    else
    {
        return false;
    }
}

虽然对于大多数文件都可以正常工作,但它在第3行(我的模板声明)上标记为任何组件类型都有“没有适当的默认构造函数”。

以下是我的组件构造函数:

public:
    Readcomponent(Object* owner) : Basecomponent(owner)
    {
        this->Type = "Read";
    };


public:
    Writecomponent(Object* owner) : Basecomponent(owner)
        {
            this->Type = "Write";
            this->WriteText = "Writecomponent Online";
        };

我知道我可能做了一些愚蠢和基本的事情,但不能为我的生活看到我出错的地方。

0 个答案:

没有答案