C ++函数将基类指针解析为派生类指针

问题描述 投票:0回答:1

我尝试将指针作为考试问题的一部分来实现类似于JSON的功能,但最终出现了一个我不知道如何解决的错误。

我有这些类(省去了实现,因为我认为这对我的错误不重要):

struct JSON_BaseObject;

template<typename J_Type>
struct JSON_Value : public JSON_BaseObject;

struct JSON_String : public JSON_Value<std::string>;
struct JSON_Number : public JSON_Value<double>;
struct JSON_Null : public JSON_BaseObject;

using JSON_Children = std::map<std::string, JSON_BaseObject*>;
using JSON_Object = JSON_Value<JSON_Children>;

[我想将JSON_BaseObject*中类型为JSON_Object的子代用作函数,这些函数对于这些派生类型具有不同的重载,因此我制作了这些函数,并希望它们将JSON_BaseObject*解析为相应的类(指针):

void print(JSON_Null*, std::ostream& os);
void print(JSON_String* str, std::ostream& os);
void print(JSON_Number* number, std::ostream& os);
void print(JSON_Object* object, std::ostream& os);

[当我运行它时,我遇到一个运行时错误,该程序无法找到函数print(JSON_BaseObject*, std::ostream&),并且我意识到我不如我以前想象的那样擅长c ++。

问题1

是否可以像这样以某种方式从基类解析指针类型参数?

问题2

我如何使其变得更好,例如不知道print(obj, os);的派生类就可以开始使用obj

我尝试将类似于JSON的内容作为指针作为考试问题的一部分,但最终出现了一个我不知道如何解决的错误。我有这些课程(省去了...

c++ pointers polymorphism c++17 derived-class
1个回答
0
投票

问题2的答案

© www.soinside.com 2019 - 2024. All rights reserved.