• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CからC++の関数呼び出し)

CからC++の関数呼び出しでコンパイルエラーが発生しています

このQ&Aのポイント
  • CからC++の関数を呼び出して値を取得したいが、コンパイルエラーが発生している。
  • externキーワード内でfuncBがスコープにないというエラーが出ている。
  • ラッパ関数を使用する方法について教えてほしい。他にも良い方法があれば教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

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をどこで作って記録させるか(そして、必要なら解放させるか)を考える必要があります。

jam118
質問者

お礼

C++としても理解ができていないプログラムだったんですね。。 インスタンスとか実体とかC++は頭がごちゃごちゃしちゃいます。 ありがとうございました。

その他の回答 (3)

回答No.4

AAA.c を AAA.cpp にしてしまえばすむことでは?

jam118
質問者

お礼

それは・・・やりたいこどではないので。。。 ご回答ありがとうございます。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>externしている箇所でfuncBはスコープにありません?のようなエラーが出てしまいます。 回答ではありませんが エラーメッセージを書くときは原文をそっくりそのまま書きましょう。 そのエラーの意味がわかってない人が意訳できるわけありませんから伝言ゲームになるだけです。

jam118
質問者

お礼

おっしゃる通りです。 すいませんでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

funcA に書いてある funcB と clsB::funcB は全くもって無関係だしねぇ.... そもそも clsB::funcB を呼び出すための (clsB の) インスタンスはどうやって渡すつもりなの?

jam118
質問者

補足

ご回答ありがとうございます。 無関係なんですか。。。どうしたらいいんでしょうか。。 staticにする? すいません。わかりません。。