c ++无法返回继承的类对象

时间:2015-03-24 13:33:41

标签: c++ inheritance

我遇到了多态问题,这就是问题所在。我使用rapidjson,在获得JSON字符串并转换后,我需要一个方法来发送SUPERCLASS InternalMsg的对象,但我需要发送继承的类对象。

实施例

class InternalMsg{
public:
    virtual ~InternalMsg() {};
};

class Event: InternalMsg{

public:

    Event(){};

    char* type;
    char* info;
};


class ScanResult : public InternalMsg{
public:
  int id_region;
  int result;
};

这是课程,这是方法,就像我说的,我正在使用rapidjson:

InternalMsg* JsonPackage::toObject(){

    Document doc;
    doc.Parse<0>(this->jsonString);

    if(doc["class"] == "Event"){
        Event* result = new Event;
        result->type= (char*)doc["type"].GetString();
        result->info = (char*)doc["info"].GetString();
        return result;
    }else{
        std::cout << "No object found" << "\n";
    }

    return NULL;
}

该方法不完整,并且在返回行中有失败。

我尝试进行转换,但是当我使用typeid()。name()时,我有InternalMsg但没有继承的类名。

非常感谢。

1 个答案:

答案 0 :(得分:5)

您正在使用私有继承,因为class的默认值为private

class Event: InternalMsg {

这意味着Event 不是 InternalMsg,并且无法从Event*转换为InternalMsg*

您应该使用公共继承:

class Event: public InternalMsg {

或者,既然所有成员都是公开的,请使用struct的默认值为public的事实:

struct Event: InternalMsg {