0

我正在为一个开源库做一些贡献,但是我在修改其他人的代码时遇到了麻烦。以前,该库有一个名为的文件IntervalT.h和一个在文件中调用Curves.h实现的文件Curves.tcc,并且由于某种原因Interval.h包括在内。Curves.h现在我需要使用IntervalT.hin Curves.h,但是当我尝试使用IntervalT<NT>in 定义的类时IntervalT.h,编译器给了我错误(我已经包含IntervalT.hCurves.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扩展?

4

1 回答 1

2

我只能猜测(因为您可以随意命名文件),但.tcc扩展名是扩展名的修改.cc(只是 C++ 代码),但t代表template. 这可以通过以下事实得到证实:Curves.h包括Curves.tcc这是一种将接口与模板实现分离的常用技术,同时仍然不会扰乱编译器,编译器期望在同一个文件中声明和定义模板化代码(或者你得到一个错误)。请参阅此答案以获得更好的主意

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

于 2011-08-15T02:28:35.197 回答