在尝试构建C ++程序时接收错误消息“带有C链接的模板”

时间:2016-07-21 12:10:39

标签: c++ gcc codeblocks mingw32

我正在尝试使用带有Mingw的CodeBlocks构建一个c ++程序我从STL库文件中收到错误,例如stl_uninitalized.h和vector.cc

|=== Build: all in MinervaSegs (compiler: GNU GCC Compiler) ===| C:\PROGRA~2\CODEBL~1\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_uninitialized.h|63|error: template with C linkage

1 个答案:

答案 0 :(得分:8)

您可能正在使用范围extern "C"表示法并在该范围内包含C ++代码。例如:

#ifdef __cplusplus
extern "C" {
#endif

#include <vector> // could generate this error

template <typename T> // would also generate this error
struct MyExample
{
    T data;
};

#ifdef __cplusplus
}  // end extern "C"
#endif

您通常应该完全避免extern "C"区域内的包含,因为这可能导致多个声明,否则它们将是相同的符号。

当与不能使C ++识别的C代码互通时,有一些特殊的例外情况 - 但在那里需要注意。