mar*_*hon 5 c++ incomplete-type
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() {}
};
Run Code Online (Sandbox Code Playgroud)
要将 FSRVertex 对象作为类的成员,编译器需要知道其大小,因此需要查看其完整定义。
要么提供类的完整定义,要么您可以存储一个指针(最好是智能指针),指向在构造函数中执行的动态分配的对象副本。您需要将构造函数主体移到类外部提供完整定义的位置。这种方法在运行时效率较低。