0

次のコードがあるとします。そのようなことは可能ですか? つまり、C++ オブジェクト内にある変数を関数に渡すということです。

foo.hpp 内

class foo
{
    public :

    int a;
}

main.cpp で

#include "cfile.h"
#include "foo.hpp"

void main()
{

    foo * fooPtr = new foo();
    int RetVal = MyCfunc(fooPtr->a);
}

cfile.c で

#include "cfile.h"

int MyCfunc(int var)
{

    var + = 1;
    return var;
}
4

2 に答える 2

3

技術的には、これはコンパイルされます (すでに指摘されているさまざまな構文上の問題を修正した後) が、注意が必要です。すべてがリンクできることを確認する必要があります (つまり、C と C++ ソース コードの両方に対してシンボルが正しく作成されます)。私は通常、C ファイルの場合は問題なく動作するコンパイラとして g++ を使用します。次に、C コードを参照することを C++ コードに確実に伝える必要があります。したがって、「cfile.h」に追加したい

#ifdef __clpusplus
extern "C" {
#endif

 // your C include file

#ifdef __cpluspus
}
#endif

これにより、C インクルード ファイルを C++ ソースに含めることができると同時に、コードのコンパイル時に C スタイルの名前マングリングを使用するよう C++ コンパイラに指示できます。次に、C および C++ ファイルでコンパイルし、実行可能ファイルにリンクします。

g++ -g -O0 -o test main.cpp cfile.c

詳細はこちら: Combining C++ and C - how does #ifdef __cplusplus work?

于 2013-07-08T10:04:10.237 に答える
1

あなたがやろうとしていることの実際のサンプルを提供した方が良いでしょう. 他の人が指摘したように、あなたが提供したコードには多くの構文の問題があり、C と C++ の間で基本的な型を渡すことはほとんど問題になりません。int はどこでも int です (32/64 ビットの境界を越えていない限り)。

問題が発生する可能性があるのは、反対側から C/C++ 関数/メソッドを呼び出したり、クラスを渡したりすることです (通常、C コードでは、ポインターを使用してそれらのみを渡します)。

于 2013-07-08T10:10:32.950 に答える