gpt4 book ai didi

c++ - 让子类在构造函数中接受对父类的引用

转载 作者:行者123 更新时间:2023-11-30 03:03:00 27 4
gpt4 key购买 nike

我有一个类层次结构,可以简单地这样说:

struct Parent {
Parent() { }
Parent(Parent& p, std::string s) { }

private:
// I want this class to be non-copyable
Parent(const Parent&);
};

struct Child : public Parent {
Child() { }
Child(Parent& p) : Parent(p, "hi") { }
};

当我尝试创建两个这样的实例时:

Child c1;
Child c2(c1);

我从 Clang 得到以下错误:

test.cpp:37:8: error: call to deleted constructor of 'Child'
Child c2(c1);
^ ~~
test.cpp:30:8: note: function has been explicitly marked deleted here
struct Child : public Parent {
^
1 error generated.

我希望这个类是不可复制的,那么有没有办法调用 Parent& 重载而不是复制构造函数?我知道它为什么会这样,但我正在寻找解决方法。我希望无需转换即可调用 Child(Parent& p)

我在 GCC 中收到此错误以及 Visual Studio。虽然我不明白英特尔的编译器,但其他三个的一致行为似乎表明它是错误的,而其他是正确的。

最佳答案

你说你不希望你的类被复制。

您还在问题中说您希望以下代码段起作用:

Child c1;
Child c2(c1);

这些要求是矛盾的。

关于c++ - 让子类在构造函数中接受对父类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com