如何共享继承类中的结构?

How to share the struct in inheritance classes?

我想分享一个struct继承类。但我不确定如何编写此类代码。

这是我想写的示例代码,但是在这段代码中出现了错误。我想与 ParentChildA 分享 struct Info。在 main 中设置 Info 后,我不想更改 Info 中的值,而是想从 Parent 和 [= 访问 Info 中的值15=]。所以我将 Info 传递给 ParentChildA.

#include <memory>
#include <iostream>
#include <vector>

struct Info
{
    Info(int num) : 
        memberNum(num)
    {

    }

    const std::string surName = "foge";
    const int memberNum;
};


class Parent
{
public:
    Parent(std::shared_ptr<Info> info) : 
        info(info)
    {};
    virtual ~Parent() {};

protected:
    std::shared_ptr<Info> info;
};


class ChildA : public Parent
{
public:
    ChildA(std::shared_ptr<Info> info) : 
        info(info) // error : C++ is not a nonstatic data member or base class of class
    { // error : C++ no default constructor exists for class

    };

    ~ChildA() {};

};


int main(int argc, char** argv)
{
    int num = 4;
    std::shared_ptr<Info> info = std::make_shared<Info>(num);

    std::unique_ptr<Parent> pa = std::make_unique<Parent>(info);
    std::unique_ptr<Parent> chA = std::make_unique<ChildA>(info);

    return 0;
}

我不确定这样的写作方式是否合适。 有人有什么主意吗?谢谢!

你需要改变

ChildA(std::shared_ptr<Info> info) : 
    info(info)

};

ChildA(std::shared_ptr<Info> info) : 
    Parent(info)
{

};

因为 info 是 Parent 的一部分,所以需要对其进行初始化。 有关详细信息,请参阅 this answer