2016-07-21 5 views
-1

を構築しようとしたとき、私はSTLライブラリからエラーを受け取るようにstl_uninitalized.hとvector.cc受信エラーメッセージ「C結合を有するテンプレート」私はMinGWをしてコードブロックを使用した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

上記のリンクの答えの1つを引用すると、テンプレートはネームマングリングで実装され、extern Cではネームマングリングが禁止されています。 – sjsam

+0

コードのどの部分にもextern 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

コードにExtern "C"がありません。コンパイラの問題に関連しています。コードはhttps://github.com/SUTDNLP/NNTargetedSentimentです。 –

関連する問題