c++ 在循环依赖中使用未定义类型

xxe27gdn  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(112)

我有下面的代码,有循环依赖,我搜索堆栈溢出和GPT我找到这个解决方案。
通过正向声明Tps类,DocumentMetaData类现在可以使用指向Tps类的指针,而不需要其完整定义。

我尝试了这个但Visual Studio仍然在DocumentMetaData中给我错误use of undefined type TPS

class Tps;

class DocumentMetaData {
     Tps* tps;
};

class Document { 
   DocumentMetaData data;
};

class Tps {
   Document doc;
   DocumentMetaData data;
};

我有什么办法解决这个问题?

如何在示例代码中声明类。
error

ghhkc1vu

ghhkc1vu1#

您所显示的错误不会发生在您发布的代码中。
尝试执行此操作时会发生错误:

class Tps;

class DocumentMetaData {
     Tps* tps = new Tps;
};

这可以通过重新排列代码来解决,因此初始化tps的代码是 * 在 * Tps的完整定义之后。

class Tps;

class DocumentMetaData {
     Tps* tps;
     // declare, but don't yet define a ctor for initialization
     DocumentMetaData();
};

class Document { 
   DocumentMetaData data;
};

// Fully define Tps:
class Tps {
   Document doc;
   DocumentMetaData data;
};

// Now Tps is defined, so we can implement the ctor:
inline DocumentMetaData::DocumentMetaData() : tps(new Tps) { }

另外,C++是大小写敏感的,所以(例如)TPSTps是不一样的。

相关问题