【问题标题】:Template Parameter Inheritance in C++C++ 中的模板参数继承
【发布时间】:2012-07-25 02:20:03
【问题描述】:

我有一段时间没有写 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 吗?

【问题讨论】:

标签: c++ templates inheritance polymorphism


【解决方案1】:

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

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

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

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

JsonType js = new JsonType();

JsonObject js2 = new JsonObject();

JsonType js3 = new JsonObject();

您可以将这些对象中的任何一个添加到如上所述初始化的地图中。

【讨论】:

    【解决方案2】:

    objects 不使用JsonObject 作为其value_type,它使用JsonTypes。

    换句话说,您分配了错误类型的map 来存储到objects

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2015-11-10
      • 2018-11-11
      相关资源
      最近更新 更多