- ベストアンサー
CからC++の関数呼び出しでコンパイルエラーが発生しています
- CからC++の関数を呼び出して値を取得したいが、コンパイルエラーが発生している。
- externキーワード内でfuncBがスコープにないというエラーが出ている。
- ラッパ関数を使用する方法について教えてほしい。他にも良い方法があれば教えてほしい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C++のプログラムとしてextern C 無しで書いたとしても動かないものですから、extern Cを付けても同じです。 funA はclsBのメンバーではありません。 よって、その中のfuncBはclsB::funcBとは別のfuncBだと解釈されます。 > 呼び出す関数内でさらに同じクラスの関数を呼び出して とありますが、「同じクラス」では無いのです。 funcB はclsBのインスタンスメソッドですから clsB objB() ; objB.funcB(); clsB *ptrB = new clsB() ; ptrB->funcB(); という感じに、インスタンスが必要です。 > いいやり方があれば と言われても、何が目的かわからないので、答えかねます。 funBが、インスタンスの情報をまったく使わないのであれば、funcBをstatic にして int funcA() { return clsB::funcB() ; } とします。 インスタンスの情報を必要とするなら int funcA() { return objB.funcB() ; } int funcA() { return ptrB->funcB() ; } となります。 この場合、objB,ptrBをどこで作って記録させるか(そして、必要なら解放させるか)を考える必要があります。
その他の回答 (3)
- Hermit6174330
- ベストアンサー率0% (0/2)
AAA.c を AAA.cpp にしてしまえばすむことでは?
お礼
それは・・・やりたいこどではないので。。。 ご回答ありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
>externしている箇所でfuncBはスコープにありません?のようなエラーが出てしまいます。 回答ではありませんが エラーメッセージを書くときは原文をそっくりそのまま書きましょう。 そのエラーの意味がわかってない人が意訳できるわけありませんから伝言ゲームになるだけです。
お礼
おっしゃる通りです。 すいませんでした。
- Tacosan
- ベストアンサー率23% (3656/15482)
funcA に書いてある funcB と clsB::funcB は全くもって無関係だしねぇ.... そもそも clsB::funcB を呼び出すための (clsB の) インスタンスはどうやって渡すつもりなの?
補足
ご回答ありがとうございます。 無関係なんですか。。。どうしたらいいんでしょうか。。 staticにする? すいません。わかりません。。
お礼
C++としても理解ができていないプログラムだったんですね。。 インスタンスとか実体とかC++は頭がごちゃごちゃしちゃいます。 ありがとうございました。