我正在努力将一些 Java 代码翻译成 C++。当我尝试编写如下代码时:
.h:
class A {
private:
class B;
std::set<B> b_set;
};
.cpp:
class A::B {
};
我遇到了一个不完整的类型错误。我理解那是因为嵌套类在 b_set
中使用之前是不完整的。但修复它的最佳方法是什么?
最佳答案
您可以在.h
文件中描述整个B
类。
这是一个工作示例。
#include<set>
class A {
private:
class B{
B():foo(1){}
int foo;
};
std::set<B> b_set;
};
但是,如果你想把你的定义和实例化分开,你可以这样做:
啊啊
#include<set>
class A {
private:
class B{
public:
B();
private:
int someMethod();
int foo;
};
std::set<B> b_set;
};
A.cpp
#include "A.h"
A::B::B():foo(1){}
int A::B::someMethod(){
return 42;
}
一般来说,嵌套类可能是一个严重的 PITA,因为你必须跳过所有的环才能访问它们。
关于嵌套类的另一个很好的引用:Nested class definition in source file
关于c++ - 在集合中使用嵌套类时出现类型不完整错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769574/