私は現在、非常に低レベルのCプログラムと高レベルのC++プログラムの間のインターフェースを作成しています。それらが関連する方法は、リンクリストを介したものです。Cプログラムにはリンクリストがあり、インターフェイスはリンクリストの各ノードに格納されている情報を取得し、それをC++ベクトルに変換します。プロセス自体はプログラムではありません。問題は、CプログラムからそのC++関数を呼び出す方法です。それについて少し説明させてください。
int importData(List *head, char * source, char * dest);
と呼ばれるC++ファイルで宣言されていますimport_helper.cpp
。私は宣言を定義し、上に示した後、実装を定義したので、コンパイルは文句を言いません。でimport.c
、Cプログラムで、その関数を呼び出そうとしています。覚えておいてください。Listは、import.c
Nowで定義された構造体import.c
です。
#if defined(_cplusplus)
extern 'C' {
#endif
typedef struct list{
struct list *next
.. other additional data goes here ...
}List;
int importData(List *head, char *source, char *dest);
#if defined(_cplusplus)
}
#endif
そしてimport_helper.cpp
ヘッダーで私はし#include "import.c"
ます。import.c
.hファイルがありません(誰かがそのコードを書いた、私は個人的にそれ自体が間違いだと思います)。
コンパイルすると、次のようになります。
error: expected unqualified-id before 'class'
error: conflicts with the new declaration with 'C' linking
error: previous declaration of 'void getPassword(char *)' with 'C++' linkage
これは単なるサンプルです。ただし、でコンパイルされ、ファイルimport.c
はでコンパイルされるとgcc
思います。それが理由でしょうか?私は同様のアプローチで他のファイルを持っていたので、それについてはよくわかりません。何か考えはありますか?ありがとうBuild
import_help.cpp
g++