Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在继承类中共享结构?_C++_C++11_Overriding - Fatal编程技术网

C++ 如何在继承类中共享结构?

C++ 如何在继承类中共享结构?,c++,c++11,overriding,C++,C++11,Overriding,我想与继承类共享一个struct。但我不知道如何编写这样的代码 这是我想写的示例代码,但错误发生在这段代码中。我想与Parent和ChildA共享struct Info。一旦我在main中设置了Info,我就不想更改Info中的值,而是想从Parent和ChildA访问Info中的值。所以我把Info传递给Parent和ChildA #include <memory> #include <iostream> #include <vector> struct

我想与继承类共享一个
struct
。但我不知道如何编写这样的代码

这是我想写的示例代码,但错误发生在这段代码中。我想与
Parent
ChildA
共享
struct Info
。一旦我在
main
中设置了
Info
,我就不想更改
Info
中的值,而是想从
Parent
ChildA
访问
Info
中的值。所以我把
Info
传递给
Parent
ChildA

#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;
}
#包括
#包括
#包括
结构信息
{
信息(整数):
memberNum(num)
{
}
const std::string name=“foge”;
常量int memberNum;
};
班级家长
{
公众:
父级(标准::共享\u ptr信息):
信息(信息)
{};
虚拟~Parent(){};
受保护的:
std::共享的ptr信息;
};
ChildA类:公共家长
{
公众:
ChildA(标准::共享信息):
信息(/C++)/错误:C++不是类的非静态数据成员或基类
{//Crime:C++ +类不存在默认构造函数
};
~ChildA(){};
};
int main(int argc,字符**argv)
{
int num=4;
std::shared_ptr info=std::make_shared(num);
std::unique_ptr pa=std::make_unique(信息);
std::unique_ptr chA=std::make_unique(信息);
返回0;
}
我不确定这是一种好的写作方式。 有人知道吗?谢谢大家!

你需要改变

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

};
ChildA(std::shared_ptr info):
信息(信息)
};

ChildA(std::shared_ptr info):
家长(信息)
{
};
因为信息是父项的一部分,所以需要对其进行初始化。 有关更多信息,请参阅。

您需要更改

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

};
ChildA(std::shared_ptr info):
信息(信息)
};

ChildA(std::shared_ptr info):
家长(信息)
{
};
因为信息是父项的一部分,所以需要对其进行初始化。
有关更多信息,请参阅。

“我想与多个继承类共享一个结构。”请详细解释。你想要实现什么?当它工作时,你希望做什么?请举例说明。使用
ChildA(std::shared_ptr info):Parent(info)
,说明
info(info)
不属于那里;这是通过他的导师在家长班为你做的。这是他的成员。
std::shared_ptr info=nullptr可以简化为
std::shared_ptr info
@Yunnosch谢谢你的评论,我更新帖子并解释more@Evg谢谢你的评论,我更新了代码。“我想与多个继承类共享一个结构。”请解释更多。你想要实现什么?当它工作时,你希望做什么?请举例说明。使用
ChildA(std::shared_ptr info):Parent(info)
,说明
info(info)
不属于那里;这是通过他的导师在家长班为你做的。这是他的成员。
std::shared_ptr info=nullptr可以简化为
std::shared_ptr info
@Yunnosch谢谢你的评论,我更新帖子并解释more@Evg谢谢你的评论,我更新了代码。