【发布时间】:2023-04-01 14:07:01
【问题描述】:
我正在将代码从 Java 移植到 c++,我想复制一些匿名功能。
在文件 A.h 我有:
class A
{
private:
int a;
class AnonClass;
friend class AnonClass;
};
在文件 A.cpp 我有:
namespace
{
class AnonClass
{
public:
AnonClass(A* parent)
{
parent->a = 0; // This doesn't work, a is not accessible
}
}
}
是否可以在 C++ 中为匿名命名空间中的类添加好友?
在 Java 中,您可以声明匿名类,因此它非常相似。它也不会将 AnonClass 暴露给 A.h 的客户
【问题讨论】:
-
您尝试过这样做吗? (没有“class AnonClass;”行)。 AFAIK,您可以像这样声明它,但是当您使用 AnonClass 时,您必须指定命名空间。是你想要的吗?
-
坦率地说,我还不能编译,我有大量未修改的函数和类要创建以获得编译的希望。我为此使用 VS2012 错误自动检测。我测试了上面的代码,但它不起作用
-
如果没有“class AnonClass;”,它也不会编译,因为 AnonClass 未定义
-
这可能是因为您可能没有前向声明 AnonClass(您必须在使用它之前(在哪里)声明一个类)。您的“class AnonClass”行定义了一个名为 A::AnonClass 的类(A 的内部类),它与另一个不同。您至少需要将“class AnonClass”行放在 A 类定义之上(这不一定能解决您的命名空间问题)。
-
@leewangzhong, 1. 不同类的声明。 2. 你不需要它。
标签: c++ namespaces friend