C ++中的模板参数继承

时间:2012-07-25 02:20:03

标签: c++ templates inheritance polymorphism

我有一段时间没有写过C ++,所以我有点生疏了。如果我有这样的课程:

class JsonType{
    protected:
        map<string, JsonType>* objects;
}

和一个继承自:

的类
class JsonObject : public JsonType{
    public:
        JsonObject(){
            this->objects = new map<string, JsonObject>();
        }
}

为什么我会收到编译器错误cannot convert...JsonObject...to...JsonType?这不应该是合法的,因为JsonObject是JsonType吗?

2 个答案:

答案 0 :(得分:1)

您可以将JsonObject对象添加到地图中,但这些类型与初始化不匹配。

编辑:您必须将其初始化为:

this->objects = new map<string, JsonType>();

但是如果你有任何一个对象:

JsonType js = new JsonType();

JsonObject js2 = new JsonObject();

JsonType js3 = new JsonObject();

您可以将任何这些对象添加到上面初始化的地图中。

答案 1 :(得分:1)

objects不会将JsonObject用于其value_type,而是使用JsonType

换句话说,您正在分配错误类型的map以存储到objects