2016-07-21 60 views
-1

我想建立使用代碼塊使用MinGW我收到錯誤從STL庫的C++程序的stl_uninitalized.h和vector.cc收到錯誤消息「的模板與C鏈接」試圖建立一個C++程序時

文件等

|=== 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

+0

[\ [this \]]的可能重複(http://stackoverflow.com/questions/4877705/why-cant-templates-be-within-extern-c-blocks)。 – sjsam

+0

要引用上述鏈接中的答案之一,模板使用名稱修飾實現,而extern C禁用名稱修飾。 – sjsam

+0

代碼的任何部分都沒有外部C.這條消息出現在stl_uninitalized.h這是頭文件在C++ –

回答

2

您可能使用作用域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++沒有意識到 - 但是要警惕那裏。

+0

代碼中沒有外部「C」。它與編譯器問題有關,這裏的代碼是https://github.com/SUTDNLP/NNTargetedSentiment –