gpt4 book ai didi

c++ - 结交类(class)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:06 25 4
gpt4 key购买 nike

我正在尝试与一个类成为 friend ,以便它能够访问它的私有(private)构造函数。

在 some_file.h 中

class B;    

namespace some_name {
class A {
public:
A() {}
private:
A (int x) {}
friend class ::B;
};
}

在 other_file.h 中

#include "some_file"

namespace {
class B {
protected:
A* get_a(int x) { return new A(x); }
};
}

编译此代码时,我得到 -错误:'some_name::A::A(int)' 是私有(private)的。

我现在,它是私有(private)的,这就是我和 B 成为 friend 的原因。我在这里做错了什么?你不能和你的构造函数交 friend 吗?是否存在命名空间问题?

谢谢

最佳答案

这样做:

namespace {
class B {
protected:
A* get_a(int x) { return new A(x) };
}
}

您不是将 B 放在根(全局)命名空间中,而是放在匿名命名空间中。

因此 ::B 无法到达 B

如果您希望 B 位于根(全局)命名空间中,根本不要用 namespace 将其括起来。这应该可以解决问题。

关于c++ - 结交类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567163/

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