Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

7.5.3 诊断有问题的搜索

有时,编译器会生成令人费解的警告或错误消息,因为它会查找您不打算编译的文件。此问题通常是由于某个文件(如 foo.h)包含了模板声明但却隐式包含了另一个文件(如 foo.cc)而造成的。

如果头文件 foo.h 有模板声明,缺省情况下,编译器会搜索名为 foo 且具有 C++ 文件扩展名(.C.c.cc.cpp.cxx.c++)的文件。如果找到这样的文件,编译器将自动把它包含进来。有关这些搜索的更多信息,请参见模板定义搜索

如果有一个不打算这样处理的文件 foo.cc,有两种解决方法:

  • 更改 .h.cc 文件的名称,以消除名称匹配。

  • 可以通过指定 -template=no%extdef 选项来禁用对模板定义文件的自动搜索。然后必须在代码中显式包含所有模板定义,并且不能使用“独立定义”模型。