• 締切済み

C++について

C++のポイントオブジェクトを持つ関数を呼び出す時の引数の渡し方とログ出力について教えて欲しいです。 extern BOOL Post(Load&m_load,Rout&m_rout,Exit&m_exit, Const char lum, int priority) (Load, Rout, Exitはクラス型) という関数を呼び出すとします。 lumとpriorityは文字と数字を渡せばいいのは分かるのですが、オブジェクトポインタを指定されているLoad, Rout, Exitは何を渡せば正解なのか分かりません。 とりあえずオブジェクト渡せばいいのかと思って Load load; Rout rout; Exit exit; として Post(load, rout, exit,'A', 13) で呼び出してデバッグしたら関数が止まってしまいました。 オブジェクトポインタを引数に持つ場合、何を渡したらいいのでしょうか。 それと止まった関数をステップ実行でどこが止まっているのか見てみたらログ出力のリクエスト待ちのところで止まっていました。 引数がおかしいせいで止まっているのだと思っていましたが他にも原因があるのでしょうか? 本当は自分で解決したいのですがあまり時間がなく、勉強する時間もありません。よろしくお願いします。

みんなの回答

回答No.2

ひとまず、 Load load; Rout rout; Exit exit; こいつらの、プロトタイプを調べてください。 もしかしたら、その中にも変数がさらにネストしている可能性もあるわけで、まして、誰かが作った関数ならなおさら、 この場では解決できませんから。

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

extern BOOL Post(Load&m_load,Rout&m_rout,Exit&m_exit, Const char lum, int priority) が、そもそも何者なのか説明がないと誰も答えられません。 C++の標準ライブラリに、そのような関数はありませんし。

関連するQ&A

  • C++の文法で分からないことがあります

    C++のコードを解析しているときに分からない部分が出てきたので教えていただきたいのですが... あるクラスのメンバ関数の引数で( {オブジェクト名}*& {変数名} )とあったのですが, *& てなんでしょうか? 参照へのポインタという意味かなとは思うのですがそれはそれで意味が分からないし、これを使うことでどんなことが起こるのか分かりません。 どなたか知っている方教えてください。 あと、objective-c++のリファレンスって存在するのでしょうか?あったらどこにあるのか教えてくださると非常に助かります。 よろしくお願いします。

    • 締切済み
    • Mac
  • C言語で構造体のメンバを簡単に出力する方法ありますか?

    いつもお世話になっています。 C言語の質問です。 単体テストログを取るために、 “関数Aをコールする前後で、関数Aに引数として渡す構造体のメンバをすべて”printf(もしくはfprintf)で出力して比較確認しなければならないのですが、 構造体のメンバが250とか、150とかあり、メンバ名もxxx_01,xxx_02などのようにエクセルなどで簡単に加工して作れるものではないので、いちいちメンバ名を指定しなければならないのでとても大変です。 オブジェクト指向言語なら、for each文とかでオブジェクトのメンバを簡単に取り出せるのでしょうが(間違っているかもしれません・・・)、C言語で構造体のメンバを、for文などのループを使って簡単に出力できる方法はないでしょうか? メンバの型は、一定ではなく、char、int、double、別の構造体のポインタ型(これは出力しなくて良い)と混在しています。メンバが全て同一の型ならポインタで構造体の先頭アドレスからsizeof(メンバの型)の分インクリメントしていけば出力できそうな気もしますが、メモリ上に連続して確保されるのかも私にはわからないので困っています。 enumで列挙して・・・というのも調べてみましたが、応用は出来ないようでした。 どなたか、地道にメンバ名を書いて出力する以外の方法をご存知の方、いらっしゃいましたらお知恵をお貸しください。 よろしくお願いいたします。 ※説明不足の点がありましたら補足いたします。

  • C言語のexternとアドレス渡しについて

    組み込み系です。 c言語でソフトを作っています。 初心者です。 例えば、Aさんがmain.cファイルにあるmain関数を作成し、 Bさんがsub.cファイルにあるsub関数を作成するとします。 mainで取得した複数のデータをsubに渡し、subが加工演算して、mainに返すとします。 複数のデータを渡す場合、引数でポインタ渡しが考えられます。 または、subがexternで外部参照する方法があります。 (複数データはグローバルでstaticを付けてないとします) 正直どちらのやり方が望ましいのでしょうか? お互いメリットデメリットがあるのでしょうか? 私の考えでは、externの場合、その複数データの名前が変わるとコンパイルエラーになる それぐらいしか思いつきません。 よろしくお願いします。

  • C#のdelegateをC++とjavaで?

    C#のデリゲードを javaとC++でできないでしょうか。 ただし、質問内容を勘違いされそうなので、求めている内容と、 求めていない内容を、詳しく 書きますと。 インタフェース委譲を使った例は、求めていません。 あらかじめ、委譲先に静的に仕組みを 作っておかなく手も、C#のデリゲードのように、シグニチァが同じなら 委譲先をはめ込めれるのが欲しいです。 単なる関数ポインタの例は、求めて いません。 C#でdelegate型を引数にとる ところに、あるインスタンスの メソッドを渡すと。 どのインスタンスのどのメソッドかまで、 認識して、コールバックできます。 関数ポインタでは、これができない。 STLの関数オブジェクトとか、古い感じの情報にヒントがあるか。調べてみましたが。よくわかりませんでした。 結局、この関数オブジェクトは、僕が求めているモノとは、違うような気がします。 よくわかりませんが。 欲しいのは、どのインスタンスのどのメソッドかまでを特定して、 記憶できる型をどうやって javaや、C++で実装できるか。 それをインタフェース委譲のように、 委譲先にあらかじめ、仕込んでおくことなしに。 ただ、メソッドのシグニチァが同じであるだけで、どのインスタンスのどのメソッドかまでを特定して記憶できる C#のデリゲードのような型を。 特殊なコンポーネントを利用せず。 標準的な言語構文のみをつかって、 どのようにしたら、 javaや、C++で、実装できるか? です。 詳しい方が、いらっしゃいましたら、 教えてください。

  • C言語でのコマンドライン引数の内部での処理のされ方

    C言語でint main(int argc, char *argv[])とメイン関数を宣言します。 2番目の引数はC言語の文法的にいうと文字列へのポインタの配列だとおもいますが、一般的な関数でこの引数に値を渡すとすると、以下のように宣言されたポインタ配列を渡すことになるとおもいます。 ・宣言 char *pa[]; ・関数への渡し func(pa); 話が元に戻りますが、main関数でもらう場合は、プログラム外部から与えられた引数は(正確に言うとアドレス)、メモリ上ではC言語で書かれたexeファイルの外から実行時にプログラムファイルのメモリ上にコピーされるのでしょうか? 自分でもうまく表現できないのですが、 ・コマンドプロンプトで引数を与えて実行         ↓ ・プログラムファイルのメモリ上に引数がロードされる ということでいいんでしょうか? 自分でもなんだかうまく表現できないので、お暇な方でよろしいので、気が向いた人、回答ください。 よろしくお願いします。

  • RS232Cシリアル通信について

    現在VC6++でRS232Cの通信プログラムの機能の追加をしている(元は違う人が製造)のですが、一部わからない部分がありました。 RS232Cを使用して電文全てログファイル出力したいのですが、 //送信 aaa = WriteFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL); //受信 aaa = ReadFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL); の様に記述がしてあり、そのすぐ後ろにログファイルを出力する記述 PrintLF((CHAR *)ccc);  //PrintLF・・・引数をファイルに出力する関数 を書いています。 (1)PrintLFの引数はunsigned charではない為PrintLF((CHAR *)ccc);と記述しましたがこれでよろしいでしょうか?(文字化けなどはしない?) (2)電文全てログファイル出力したいとなると、WriteFi・ReadFileのすぐ後にログ出力の記述(第2引数を出力)してあげればよろしいでしょうか? (3)実際にテストが出来ない為、いいソフトはないでしょうか? 以上ですがよろしくお願いいたします。

  • ファイルポインタのヘッダーファイルの配置について

    分割コンパイルをしている別ファイルの別関数から、同じファイルポインタ(main関数でfopen済み)に出力(fprintf)は可能でしょうか? 可能な場合、 1.ファイルポインタをexternで宣言 2.ファイルポインタをヘッダファイル内で宣言 3.その他方法 どの方法で実現できるのでしょうか? サンプルコード等書いていただけたら助かります。 よろしくお願い致します。

  • テンプレート引数の型推測

    コンパイラはVC++2008です。 いろいろあって、あるクラスにおいて関数ポインタと関数オブジェクト双方を 同じように利用できないかと考えて、次のように試みました。 class Base { public:     virtual void func() =0; }; template<class Func> class CFunc :public Base { private:     Func m_func; public:     CThreadFunc(Func func):m_func(func){}     void func(){m_func();} }; class Hoge { private:     Base* base; public:     template<class Func>     Hoge(Func func)       :base(new CFunc<Func>(func))     {}     ~Hoge()     {       delete base;     }     void DoSomething()     {       base->func();     } }; クラスをテンプレートにするといちいち指定しなければならないので、 まず基底クラスに適当な仮想関数を設け、それを継承したクラスをテンプレートにしました。 そしてコンストラクタの引数で何かしらを受け取って、オーバーライドした関数の中で 関数ポインタか関数オブジェクトだと仮定して呼び出しています。 さらに基底クラスのポインタを目的のクラスが保持してやり、 こちらはコンストラクタをテンプレートにすることで引数から型を推測してもらうことで 先ほどのテンプレートクラスのインスタンスを作成しています。 そしてポインタを介してfunc()を使ったり…、などすれば、 とりあえず引数なしの関数と関数オブジェクトを同等に扱えないかなと思ったからです。 で、このようなクラスを作成してコンパイルすると、 void func(); //何かしら処理する関数 class Function { public:   void operator ()();  //何かしら処理する関数オブジェクト }; があったとして、 int main() {   Function function;   Hoge hoge(function); //いったん作ってから渡す   Hoge hoge2(func); //関数を渡す     hoge.DoSomething();   hoge2.DoSomething();    } は動きました。しかし、 int main() {   Hoge hoge(Function()); //引数を初期化する } とすると次のようなエラーが出ます。 warning C4930: 'Hoge hoge(Function(__cdecl *)(void))': プロトタイプされている関数が呼び出されませんでした (変数の定義が意図されていますか?) また、 int main() {   Hoge hoge(Function()); //引数を初期化する   hoge.DoSomething();  //クラスにアクセス } とすると次のようなほかのエラーが出ます。 error C2228: '.DoSomething' の左側はクラス、構造体、共用体でなければなりません。 しかし、例えば関数オブジェクトのコンストラクタに引数が設定されていたとして、 class Function { public:   Function(int dummy);  //何か値を受け取る   void operator ()();  //何かしら処理する関数オブジェクト }; となっていた時、 int main() {   Hoge hoge(Function(1)); //引数を初期化する   hoge.DoSomething();  //クラスにアクセス } の呼び出しは正常にコンパイルされ、想定通りの動きをします。 全く使わなくても、一つ以上の適当な引数を何でもいいからコンストラクタが持てば、 普通にコンパイルされるみたいです。ただ、デフォルト引数を与えてHoge hoge(Function())と 同じ形ですと引数があってもできないみたいです。 まったく通らないなら最初からあきらめるですが、中途半端にちゃんと動くために エラーの原因を知りたいと思っています。 テンプレートの場合には、引数に渡すタイミングで初期化はしてはいけないのでしょうか?

  • Linuxでexit()をフックするには?

    glib内のある関数のパフォーマンスを調べるために、 ログを埋め込もうとしています。 手法としては、あらかじめメモリ領域を確保しておき、 glibc内でメモリ上にログを吐き出し、 glicを使用するアプリケーション終了時(exitシステムコール実行時)に、 ログを出力しようと思います。 そこで質問なのですが、 Linuxのglibc(2.3.3)でexit()をフックして、 自前の関数を呼び出す方法はありますか? ご存知なら教えてください。

  • VisualStudioから設計書を起こしたい

    VisualStudioでは、 (1)オブジェクトブラウザー?で各クラスのメソッド名、引数が見れますが、それを出力したいです。 (2)関数の上に記載した、<Summary>の内容を出力したいです。 最近のVisualStudioでできるか?やVisualStudio2005でできるか?までご存知であればご教授願いたいです。

専門家に質問してみよう