2

c++ クラス関数で c 関数を使用する際に混乱する問題があります。

Aで定義A.hおよび実装されているという名前のクラスがありA.cppます。また、いくつかの関数を宣言および実装した and がありますB.hB.c

関数内でandAで定義されている関数を呼び出しました(クラスはありません) 。B.hB.cBUnresolved referenceB

#include "B.h"A.cppコンパイラは Linux (opensuse 12.3) の GCC です。申し訳ありませんが、著作権のためにコードを表示できません。

私は C++ のプロではありませんが、C++ ヘッダーとソース ファイルが連携する方法を知っているので、これについて同様の経験がある人に助けを求めています。

ありがとう

4

3 に答える 3

3

あなたがしたい:

extern "C" {
    #include "B.h";
}
于 2013-08-16T12:53:22.287 に答える
3

Bc をコンパイルするだけでなく、その関数を含める必要があります

gcc -Wall A.cpp B.c -o my_prog

その場合は、C 関数の名前マングリングを避けるために、次のガードを Bh に追加してください。

#ifdef __cplusplus
extern "C" {
#endif

/* declare your C functions here */

#ifdef __cplusplus
}
#endif
于 2013-08-16T12:54:39.967 に答える
0

別のヘッダーを作成します --> Sh、その中に Ac と Bc の両方の function() を含めます..そして、必要な場所に含めます..

また

C 標準 C ヘッダー (stdio、stdlib、assert、...) のリストについては、先頭に ac を追加し、.h を削除します。たとえば、stdio.h は cstdio になります。

For other headers, use

extern "C"
{
  #include "other_header.h"
}
于 2013-08-16T12:52:55.483 に答える