gpt4 book ai didi

c++ - 循环引用 : Class has no constructors and the null member shared_ptr value

转载 作者:行者123 更新时间:2023-11-28 02:26:30 26 4
gpt4 key购买 nike

我想这样做,但我有一个错误,提示 Y class has no constructors

class Y;
class X
{
std::shared_ptr<Y> base;
//other private stuff
public:
X()
{
base = std::shared_ptr<Y>(new Y(this));
}
std::shared_ptr<Y> Get(){ return base; }
};
class Y
{
X d;
//other private stuff
public:
Y(X * b) :d(*b){}
};

用作

X x; // all values in X is defined
std::shared_ptr<Y> spy=x.Get();

spy 包含 X 中的所有私有(private)值,除了它自己的 shared_ptr,它是空的。这是正常的吗?

更多解释:spy 包含 d,即 X 的。如果我在调试器中查看 spy 内的 d,我会看到 base 是空的。只有我错了吗?

最佳答案

由于 X::X() 的定义依赖于特定的 Y 构造函数的存在,因此它需要在后者之后。即:

class Y;

class X
{
std::shared_ptr<Y> base;
//other private stuff
public:
X(); // just the declaration here, we don't know that Y(X*) is
// a valid constructor yet.
std::shared_ptr<Y> Get(){ return base; }
};

class Y
{
/* all of Y */
};

// NOW, this is valid
// because we know that Y::Y(X*) is a valid constructor
X::X() {
base = std::shared_ptr<Y>(new Y(this));
}

关于c++ - 循环引用 : Class has no constructors and the null member shared_ptr value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30443471/

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