在c++问题中,两个文件相互包含

Two files include each other in c++ problem

本文关键字:两个 文件 包含 问题 c++      更新时间:2023-10-16

我正在为一个开源库做一些贡献,但在修改其他人的代码时遇到了困难。以前,该库有一个名为IntervalT.h的文件和一个称为Curves.h的文件,实现在文件Curves.tcc中,由于某种原因,Interval.h包括Curves.h。现在我需要在Curves.h中使用IntervalT.h,但当我尝试使用IntervalT.h中定义的类IntervalT<NT>时,编译器给了我错误(我已经在Curves.h文件的开头包含了IntervalT.h(:

../../../inc/CORE/poly/Curves.h:1337:3: error: ‘IntervalT’ does not name a type

我的问题是:由于我以前从未有过这样的经历,"does not name a type"错误是否与c++头文件的相互包含有关?或者是其他错误导致了这个错误?如果是这样的话,我应该如何编写程序,让Curve.h看到IntervalT.h?

顺便说一下,这段代码的组织方式非常奇怪。Curves.tcc实际上包含在Curves.h中,这与我们通常的做法相反。这样做有什么特殊的原因吗?或者这其实并不重要?什么是.tcc扩展?

我只能猜测(因为你可以随心所欲地命名你的文件(,但.tcc扩展名是对.cc扩展名的修改(它只是C++代码(,而t代表templateCurves.h包含Curves.tcc这一事实证实了这一点,CCD_21是一种将接口与模板实现分离的常见技术,同时仍然不会干扰编译器,因为编译器希望在同一文件中声明和定义模板化代码(否则会出现错误(。查看此答案以获得更好的想法。

does not name a type可能是IntervalT是一个模板,而您没有提供模板参数(或者这可能是另一个错误,我没有尝试过(,或者即使文件名为IntervalT.h,它也不包含名为CCD25的类,或者它在不同的命名空间中。在我们做出更好的诊断之前,你必须提供更多信息。