如何共享继承类中的结构?
How to share the struct in inheritance classes?
我想分享一个struct
继承类。但我不确定如何编写此类代码。
这是我想写的示例代码,但是在这段代码中出现了错误。我想与 Parent
和 ChildA
分享 struct Info
。在 main
中设置 Info
后,我不想更改 Info
中的值,而是想从 Parent
和 [= 访问 Info
中的值15=]。所以我将 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;
}
我不确定这样的写作方式是否合适。
有人有什么主意吗?谢谢!
你需要改变
ChildA(std::shared_ptr<Info> info) :
info(info)
};
至
ChildA(std::shared_ptr<Info> info) :
Parent(info)
{
};
因为 info 是 Parent 的一部分,所以需要对其进行初始化。
有关详细信息,请参阅 this answer。
我想分享一个struct
继承类。但我不确定如何编写此类代码。
这是我想写的示例代码,但是在这段代码中出现了错误。我想与 Parent
和 ChildA
分享 struct Info
。在 main
中设置 Info
后,我不想更改 Info
中的值,而是想从 Parent
和 [= 访问 Info
中的值15=]。所以我将 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;
}
我不确定这样的写作方式是否合适。 有人有什么主意吗?谢谢!
你需要改变
ChildA(std::shared_ptr<Info> info) :
info(info)
};
至
ChildA(std::shared_ptr<Info> info) :
Parent(info)
{
};
因为 info 是 Parent 的一部分,所以需要对其进行初始化。 有关详细信息,请参阅 this answer。