此代码引发注释中指出的编译器错误error: field ‘fTarget’ has incomplete type
。为什么会这样呢?我只是分配该字段,而不做任何需要了解内部内容的操作...还是我吗?也许无法弄清楚拷贝构造函数?
class FSRVertex; //fwd
class FSREdge
{
public:
char fC;
FSRVertex fTarget; //compiler error
FSREdge(char c, FSRVertex target) : fC(c), fTarget(target) {} //compiler error
};
class FSRVertex {
public:
boost::unordered_map<char, FSREdge> fOutEdges;
FSRVertex() : fOutEdges() {}
};
最佳答案
要将FSRVertex对象作为您的类的成员,编译器需要知道其大小,因此需要查看其完整定义。
可以为您的类提供完整的定义,或者可以存储一个指针(最好是智能指针),该指针指向在构造函数中执行的对象的动态分配拷贝。您将需要将构造函数主体从类外部移动到提供完整定义的位置。这种方法在运行时效率较低。
关于c++ - 使用前向声明时如何解决 "field has incomplete type"错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26637879/