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

时间:2011-08-15 02:11:29

标签: c++ inclusion

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

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

我的问题是:既然我之前从未有过这样的经历,那么“does not name a type”错误是否与c ++头文件的相互包含有关?或者是导致此错误的其他错误?如果是这样,我应该如何编写程序让Curves.h看到IntervalT.h?

顺便说一句,这段代码是以非常奇怪的方式组织的。 Curves.tcc实际上包含Curves.h,这是我们通常采用的相反方式。有没有特别的理由这样做?或者它真的没关系?什么是.tcc扩展呢?

1 个答案:

答案 0 :(得分:2)

我只能猜测(因为你可以根据需要命名你的文件),但.tcc扩展名是.cc扩展名(只是C ++代码)的修改,但是{{1代表t。这是由template包含Curves.h这一事实所证实的,Curves.tcc是一种将接口与模板实现分离的常用技术,同时仍然不会扰乱编译器,该编译器需要在模板中声明和定义模板化代码。同一个文件(或者你得到一个错误)。 See this answer to get a better idea

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