- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 756 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:36:15 ]
- >>753
vector<string>版も意外に速いなw STLコンテナは基本的に値を保持するんで、その場合はstringのインスタンスを コピーしまくることになる ポインタだけで操作すれば格段に速いのは当たり前だ vector<>が遅いというよりはメンバのコピーに時間がかかっているだけなので、 そこが性能のボトルネックになっているのなら、 vector<char*>でポインタを保持するなり vector<int>でインデクスを保持するなりするとよいだろう
- 757 名前:753 mailto:sage [2007/08/27(月) 15:45:43 ]
- >>756
なるほど、言われてみればインスタンスのコピー云々で納得です。 御指導ありがとうございましたm(_ _)m
- 758 名前:デフォルトの名無しさん [2007/08/27(月) 16:01:38 ]
- 質問です。
i = (char*)malloc(sizeof(char) * 256); でメモリ領域を確保したのですが、256バイト以上使用することができます。 なぜでしょうか?教えてください
- 759 名前:デフォルトの名無しさん [2007/08/27(月) 16:03:02 ]
- >>758
たまたま
- 760 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:07:29 ]
- >>758
本来アクセスしちゃいけないところにアクセスしてるだけ CはC#などとは違ってそんな事しても例外は発生しないし たまたま何のエラーも出ない事がある だからってそんな事やってたらきっとそのうちクラッシュするよ
- 761 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:10:57 ]
- >>758
一般的にmallocは、予めOSから確保しておいたでっかいメモリの塊から 必要な分だけを切り分けて自身の戻り値にしている(残りは次回以降のmallocなどで使う)。 理由は、OSのメモリ確保処理が大抵大容量の確保に向いていて小回りが利かないから。 そういうわけでその256バイトの後ろにも、OSから見れば アプリケーションが確保した(実態はmallocが抱えていたり 他のmallocなどの呼出で使われている)メモリ空間が広がっている。 だから一見256バイトの後ろも読み書きできるように見えるというわけ。
- 762 名前:デフォルトの名無しさん [2007/08/27(月) 16:16:24 ]
- 758です。
勉強になりました。 ありがとうございます。
- 763 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:19:05 ]
- 運が悪いと範囲外に書き込んだときに他の変数の値書き換えたりすることがあるから範囲外アクセスはNGよ
- 764 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:10:51 ]
- 質問させて頂きます。
現在UNIX環境でコンソールベースのプログラムを組んでいるのですが CUIからメニューの操作、カーソル操作の為のエスケープシーケンスに悩んでおります コンソールベースのプログラム自体あまり組んだ事ないのですが CUIからメニュー操作というのは可能なのでしょうか?
- 765 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:16:05 ]
- 環境によるかもだけど、ncursesとか調べてみると幸せになれるかもしれない。
- 766 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:27:24 ]
- >>764
こんなのでいいなら簡単にできるけど エスケープシーケンスの設定が済んでいることが前提 #include <stdio.h> int main(void){ int i, x, y; printf("\x1b[2J"); // clear screen for(i=1;i<=9;i++){ x=i; y=(i%2)+1; printf("\x1b[%d;%dH", y, x); // cursor move printf("%d", i); } return 0; }
- 767 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:31:35 ]
- malloc使う奴はクソだとか言われる事が増えてきてる中、このスレは落ち着きますね…
- 768 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:34:39 ]
- まじで?そんなこと言う奴がいるのか・・・
- 769 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:52:36 ]
- vector型の配列をランダムに並び替えるには自前で作るしかないですかね?
- 770 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:56:12 ]
- std::random_shuffle だっけ
- 771 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:47 ]
- >>770
ありがとうございます
- 772 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:44:37 ]
- >>765-766
有難うございます。 ncursesについて詳しく調べて見たいと思います。 エスケープシーケンスからの操作なのですが、設定とはどう行うかご教授願えないでしょうか? 検索しても見つからなくてorz
- 773 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:51:24 ]
- >>772
UNIX環境なら使うターミナルを選ぶだけかな… MS-Windows環境なら ansi.sys を読み込ませる
- 774 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:34 ]
- >>772
TERM環境変数 普通はシェルの初期化スクリプトなどで設定するが、 普通にシェルを操作できてるんなら、まあ大丈夫だろう
- 775 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:01:57 ]
- >773
えー。それって、Windows環境で、DOS-Exeを動かす場合だけでそ。
- 776 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:12:20 ]
- >>773-775
有難うございます。 凄く勉強になります。 ご教授して頂いた所を詳しく調べてみたいと思います。
- 777 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:48:42 ]
- >>775
bashとかでもあるよ。
- 778 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:54:03 ]
- だれか俺にbashとansi.sysの関係を教えてくれ。
- 779 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:58:10 ]
- すまん。レス番見間違えた。
- 780 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:00:09 ]
- プログラム初心者なのですが,助けてください.
VC++2005Express,WinXP Pro環境で, コンソールアプリケーション上でWM_TIMERを使いたいのですが, 調べてみると不可視ウィンドウを作れば良いと書かれていました. そこで,以下のようなウィンドウを生成しているのですが,うまく動きません. ご教授いただけないでしょうか? HWND Create(){ WNDCLASS wcHide; HWND hwndHide; // ウィンドウクラス wcHide.style = 0; wcHide.lpfnWndProc = (WNDPROC)MWndProc; wcHide.cbClsExtra = 0; wcHide.cbWndExtra = 0; wcHide.hInstance = (HINSTANCE)GetModuleHandle(NULL); wcHide.hIcon = NULL; wcHide.hCursor = NULL; wcHide.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcHide.lpszMenuName = NULL; wcHide.lpszClassName = ""; hwndHide = CreateWindow ( wcHide.lpszClassName, "", WS_DISABLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, wcHide.hInstance, 0); }
- 781 名前:780 mailto:sage [2007/08/28(火) 03:01:24 ]
- LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wp, LPARAM lp)
{ switch ( iMessage ) { case WM_CREATE: SetTimer(hWnd , 5000 , 1 , NULL); return 0; case WM_TIMER: printf("test\n"); return 0; } return 0; } とりあえず,5秒毎に"test"を出力できるようにしたいのですが, よろしくお願いします.
- 782 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:04:49 ]
- www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88&btnG=%E6%A4%9C%E7%B4%A2
うまく動かないってのはどんな状況?
- 783 名前:780 mailto:sage [2007/08/28(火) 03:20:40 ]
- 正しくはご教示でしたか
間違えて使っていました.ありがとうございます. >うまく動かないってのはどんな状況? 何も表示されずに終了してしまいます. 以下を試してみましたが何も表示されませんでした. ・main文でCreate()を呼び出した後にwhile(1)やsleepをはさんでみる ・WndProc()関数の最初にprintfでチェッカーをはさむ よろしくお願いいたします.
- 784 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:23:52 ]
- >>780
メッセージループはあるか? なければググれ
- 785 名前:デフォルトの名無しさん [2007/08/28(火) 03:32:35 ]
- ウィンドウクラスの名前が無い。
RegisterClassしてない。 SetTimerの第2引数と第3引数が逆とか、 ウィンドウプロシージャで自分で処理しないメッセージをDefWindowProc()に渡してない。
- 786 名前:780 mailto:sage [2007/08/28(火) 03:40:59 ]
- >>784
ありがとうございます. ありません.早速ググってみました. >>785 ありがとうございます. 調べてみます.
- 787 名前:780 mailto:sage [2007/08/28(火) 04:42:09 ]
- >>784
>>785 ありがとうございました. ご指摘の通り,メッセージループ,RegisterClass,DefWindowProc() 全てを書いたところ,意図した動きをしました. お世話になりました.
- 788 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:41:34 ]
- ちょっと質問。
・外部ハードからデータを所得(配列に格納)し、そのデータ長に数値計算を施し結果を画面上に表示させたい この動作で、随時変化しているデータ長の所得・数値計算・グラフ描画、 この3つを同時?(なるべくリアルタイムにあるデータ長の数値計算結果をグラフ描画)したいんだけど、 こういう場合ってどんな風に処理・流れにさせればいいの? 例えば、マルチスレッド(出来るかどうかよくわかりませんが)を使って データ所得→計算→描画 | →データ所得→計算→描画 | →データ所得→計算→描画 こんな感じで計算させつつデータを所得。描画させつつ計算。みたいに出来ますか?
- 789 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:56:44 ]
- 所得
- 790 名前:デフォルトの名無しさん [2007/08/28(火) 06:00:16 ]
- データ所得税
- 791 名前:788 mailto:sage [2007/08/28(火) 06:06:24 ]
- すんません。取得の間違いでした
- 792 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 08:23:36 ]
- その程度なら今のPCは十分に早いから
データ所得→計算→描画→データ所得→計算→描画 で十分じゃね? データ取得に時間掛かるならデータ取得部分だけ別スレッドで回した方がいいけど。
- 793 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 18:09:00 ]
- 典型的なProducer-Consumerパターンでないの?
- 794 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:40:45 ]
- >>788
出来る出来ないで言えば、出来ると思う。 どっちかいうと、例えばデータをファイルに書き込んでるなら、 データ書き込みとデータ読み出しの排他処理してるだろうから、 あんまり頻繁に読み出しに行くとデータ更新を阻害しそうで そっちの方が怖い。
- 795 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:47:05 ]
- >>788読む限りでは出力先は画面でないの
ファイルに書き戻したりしてないように見えるけど
- 796 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 23:53:55 ]
- Windows SDKの_msize()で、callocした領域のサイズを見ようと呼び出したのですが、
呼び出した行でプロセスが停止してしまいます。 エラーも何も帰ってこず、前の行のprintfは呼ばれて、次の行のprintfは呼ばれていないという 状況です。_msize()の説明を見ると、動的確保されていない領域でも エラーが帰ってくるみたいですが… こういった症状聞いたことある方いませんか? VC6でデバッグビルドです。よろしくお願いします。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:09:09 ]
- ぬるぽではないのか
- 798 名前:796 mailto:sage [2007/08/29(水) 00:11:55 ]
- ガッ
- 799 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:13:31 ]
- 引数に入れてやったポインタがNULLを指してるってことでしょうか
今環境がないので試せないですが、if ( p == NULL ) とかで見てみます
- 800 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:14:12 ]
- だめだこりゃ
- 801 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:16:09 ]
- ?
違うんですか?
- 802 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:17:38 ]
- 違う
- 803 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:19:45 ]
- よくわからないので教えて貰えませんか?
_msizeの戻り値を参照してるところで止まってる訳でもなく、 _msize自体で止まるので、引数として渡してやったポインタがNULLなのかと思ったのですが
- 804 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:25:12 ]
- >>803
NULLに対する対処くらいしていてもよさそうだけど
- 805 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:07 ]
- >>804
よく読んでみれば、 この関数は、パラメータを検証します。memblock が null ポインタの場合、 「パラメータの検証」に説明されているように、_msize は無効なパラメータ ハンドラを 呼び出します。エラーが処理されると、この関数は errno を EINVAL に設定し、-1 を返します。 とのことなので、-1が返ってくるようですね。 ぬるぽってヌルポインタ(Javaとかだとヌル参照例外)のことですよね? 引数のポインタがNULLでも動くなら、>>797は何について仰ってるのでしょうか?
- 806 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:26 ]
- >>803
試しに_msizeの引数にNULL入れたら、Assert出て落ちた。 VS2005 Standard Edition 「止まる」というのは、関数から戻って来ないのか、不正終了するのか、どっち?
- 807 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:35:00 ]
- ねるぽ
- 808 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:37:28 ]
- 確認しないとわからないかも…
というのは、Windowsのサービスとして動かしてるのです。 サービスでも普通のプログラムと同じようになんかダイアログでて 落ちるのなら前者の関数から戻ってきてないのだと思いますが、 出なくて静かに落ちるなら、タスクマネージャからプロセスが生きてるか確認しないとわからないかも >>796のそこで止まるというのは、_msizeを挟んで呼び出し前と呼び出し後を ログに吐かせたときに、呼び出し前までしか吐かれてなかったのです。 Assert出て落ちるのなら、プロセスが静かに死んでそうな気がしてきました。
- 809 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:39:32 ]
- 確認してなかったのか
- 810 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:40:17 ]
- ウザ〜イ!ウザイよ小沢さん。想像で答えられてもウザ過ぎるよ。
- 811 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:13 ]
- まぁ「初心者歓迎」ってついとるし、初心者はバグの見所もわかんねだろ。
免罪符にゃならんが。 そこら辺分からんと答えよう無いしな。
- 812 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:15 ]
- そこだけ切り出してコンソールアプリにでもしてみれば。
NULLじゃないけど IsBadReadPtrに引っかかるポインタとか
- 813 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 06:40:31 ]
- サービスであっても、デバッガアタッチするといいb
- 814 名前:デフォルトの名無しさん [2007/08/29(水) 13:31:03 ]
- >>805
本当によく読んでるのか? > _msize は無効なパラメータ ハンドラを呼び出します。 無効なパラメータ ハンドラが何やるかしってるか? > 無効なパラメータが見つかると、C ランタイムは、 > 現在割り当てられている無効なパラメータ ハンドラを呼び出します。 > 既定により無効とされているパラメータが見つかった場合、 > ワトソン博士のクラッシュ レポートが起動します。 > 実行中のアプリケーションはクラッシュし、分析用のクラッシュ ダンプを > Microsoft に提供するかどうかをユーザーに求めるメッセージが表示されます。 > デバッグ モードでは、無効なパラメータが見つかるとアサーション エラーになります。
- 815 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:48:30 ]
- かなり初歩的な質問で申し訳ないんだけど
現在VC++ 2005 Express Editionで開発中で、所謂多重定義の問題にハマっています Formアプリで、複数のFormをどんどん遷移していくような感じなのですが イメージとしては、ATMのような、各画面1クリックでどんどん進むようなので、それぞれの画面が 個別のFormとして作られています。 (Form1がForm2を作って、Form2が3を・・のような) で、聞きたい事は、VC++2005ExpEditでは、Formを作ると、そのclassの定義がすべてForm1.h のように、ヘッダファイルに書かれてしまいます。 このとき、Form1とForm2で相互にincludeしたい場合、多重includeガードをしても、定義のせいで リンクがエラーになり、コンパイルが通りません。 いちいちForm1.hの中身を.cppにコピペし、宣言のみを.hに書き直すようなことをしなければいけないのでしょうか うまい回避方法があれば教えてください。 (長文すみません)
- 816 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:58:45 ]
- C++/CLI?
- 817 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:02:03 ]
- API直で叩けばいいんじゃね?
- 818 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:25:54 ]
- stlのstring使っています。
このstringを1行ごとに読み込んで処理したいのですが、どのようにすればいいでしょうか? tokenが使えないので、ちょっと苦労しています。一旦とってきたstringをcharに変えるのも、どうかなぁ……って気がしますし、 できれば、stringのままで一行ごとの読み込みがやりたいんですが、やり方を教えてください。 VC++2005 WinXPHomeです。
- 819 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:32:43 ]
- findとかiteratorで改行しらべる
- 820 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:01:37 ]
- >>815
#ifndef Form1_H #define Form1_H #include "Form2.h" class Form1 : public Form { }; #endif ---------------------- #ifndef Form2_H #define Form2_H #include "Form1.h" //Form1.hからincludeされた場合はForm1_Hが定義済みなのでインクルードガードで無視される class Form2 : public Form { }; #endif こんな感じで書かれてればエラー出ないと思うんだが‥‥
- 821 名前:デフォルトの名無しさん [2007/08/29(水) 23:48:13 ]
- つか、C++を使ってなぜ.NETなのかさっぱり分からん
- 822 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:51:54 ]
- つか、C++を使ってるのか.NETなのかさっぱり分かってないんだろう
- 823 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:52:29 ]
- >>818
std::istringstreamとstd::getline(std::stringを引数にとるほう)はだめ?
- 824 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:56:08 ]
- >>818
意味がイマイチわからんかったが、 istringstream と >> じゃだめか?
- 825 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:58:58 ]
- >>823
あ そっちじゃなきゃだめだわ (大域のgetline か basic_istream<> の istream)
- 826 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:07 ]
- >>818
boost, boost-sandbox or pstade使ってもいいなら良い方法があるんだけどいいかな? by boost厨
- 827 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:32 ]
- basic_istream<> の istream ×
basic_istream<> の getline ○
- 828 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:04:46 ]
- 聞いてくれよ、おら
C++のunionにメソッドを置おけること、昨日知ったよ、orz これって常識?
- 829 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:39 ]
- >>828
structはよく見るけどね
- 830 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:40 ]
- unionを使うことが非常識
- 831 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:17:44 ]
- どちらかというと常識ではないと俺は思う。
自身で使ったことがないし、他人が使っているのを見たこともないし。
- 832 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:25:36 ]
- なんかクラスWidgetがあって、
Widget(); という文があったら、Widgetのオブジェクトを(デフォルトコンストラクタで)作成して、 次の行に逝く前にすぐ消される(デストラクタが呼ばれる)と思います。 んじゃ、こういう場合はどうだろうと思い、↓を書いてみました。 Widget *w = &Widget(); 「Widget() はこの行でデストラクタが呼ばれ消えてしまうので、ポインタwは無効になるだろう」と考え、 考え通り、すぐデストラクタが呼ばれました。 んじゃ、参照はどうだろうと・・・ Widget &w = Widget(); 自分の考えとは違ってすぐにデストラクタが呼ばれず、この関数(またはブロック)を抜けるところでデストラクタが呼ばれました。 参照だと何か特殊なんですかね・・・
- 833 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:29:15 ]
- 参照には null が無いから
- 834 名前:デフォルトの名無しさん [2007/08/30(木) 00:34:16 ]
- 大きなファイルサイズの読み込みを早めるためにMemoryMappedFile使う場合、
ファイル全てのアドレスを割り当てたらまずいですよね・・? やはりマッピングアドレスを動的に変化させる仕組みが必要でしょうか? そうすると編集時に問題になってしまいそうですが、何かセオリーみないなモノはあるのでしょうか?
- 835 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:39:33 ]
- >>832
const参照なら標準規格でも明文化された規定になっている。 (知っている人は少ないかもしれないが) けれど、非const参照の初期化に一時インスタンスの使用はできないことになっている。 一時インスタンスは右辺値だが、非const参照の初期化には左辺値が要求されるため。 最近のVC++やg++ではエラーになる。 どうせお前が使っているのはBorand C++だろう。窓から投げ捨てろ。
- 836 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:40:16 ]
- >>832
参照は一時オブジェクトを捕まえておける 関数の戻り値とかもおっけー
- 837 名前:836 mailto:sage [2007/08/30(木) 00:40:53 ]
- const参照だけだっけか。すまそ。
- 838 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 01:04:15 ]
- >>823,824
thx istringstreamでいってみます。
- 839 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 12:51:44 ]
- >815
別にForm1の定義がまるまる欲しいわけじゃないでそ。 Form *createForm2(); みたいな生成関数があれば大抵足りるんじゃないの。
- 840 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 13:45:38 ]
- >>820
ガードは試してみたんですが、「定義」が.hに書かれているので・・ >>839 まったくそのとおりなんですが VCを使うと、デフォルトでヘッダファイルに定義が書かれているんですよ なので、どうしたものだろうかと やっぱり、いちいち自分でヘッダファイルに書いてある定義をcppに持っていって、ヘッダファイルでの 宣言は改めて書くようにしないとダメなんでしょうか
- 841 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:06:39 ]
- >>835
BCCタンを悪く言うと痛い目にあうお(#^ω^)ビキビキ
- 842 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:56:48 ]
- >>835
警告は出るがな
- 843 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 16:09:45 ]
- >>840
form2.h では、#include "form1.h"のかわりに、 class Form1; と書いとけ。 これで、Form1* ほげほげって書けるようになる。 form1.h でも同様にする。 form1.cpp, form2.cpp では、両方のヘッダファイルをincludeする。
- 844 名前:デフォルトの名無しさん [2007/08/30(木) 21:06:59 ]
- BorlandC++5.5.1を使ってコンパイルしているのですが、
このコンパイルをプログラム側からSystem()関数で行った場合に、 プログラム側でコンパイルでエラーが出たかどうかを判断できないのでしょうか? 具体的には System(bcc32 helloworld.c); の返り値とかで判断できないものでしょうか?
- 845 名前:844 [2007/08/30(木) 21:07:40 ]
- すみません、C言語です。
- 846 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:30:34 ]
- 無理。
- 847 名前:844 [2007/08/30(木) 21:33:22 ]
- >>846
そうですか、意外とプログラム側から分かる情報は少ないんですね。。。 どうしようかな・・・
- 848 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:38:26 ]
- 諦めろ
お前には無理 お前のプログラム側から分かる情報なんて皆無
- 849 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:42:46 ]
- んあ?
コンパイルに失敗したかどうかは分かるんじゃない? エラーが出たのかどうかは分からんが。 BCCのsystem()は良く知らん。 gccのなら、↓でcommandの終了コード取れたと思うけど。 status = system("command"); if(WIFEXITED(status)) exit_code = WEXITSTATUS(status);
- 850 名前:844 [2007/08/30(木) 22:02:00 ]
- >>849
manpageを見る限りだと、<sys/types.h>と<sys/wait.h>の二つをインクルードするみたいなのですが、 これをコンパイルしたところ、sys/wait.hをオープンできないというエラーがでます。 何故でしょうか・・・;; ちなみにそのWEITSTATUSの返り値はint型でいいのでしょうか?
- 851 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:04:07 ]
- お前がアホだから
- 852 名前:デフォルトの名無しさん [2007/08/30(木) 22:06:34 ]
- 数千行から1万行程度で書けて、出来たとき達成感のあるような練習課題思いつけば教えてください
テトリスとかどうかなと思ってるんですが
- 853 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:33:30 ]
- 将棋でも作れば?
- 854 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:36:06 ]
- >>852
テトリス
- 855 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:48:33 ]
- >>850
いや、ちょっと待ち。 BCCはWindowsの話じゃないのか? gccはUNIXとかLinuxの話で。 WEXITSTATUSがBCCでも存在するか知らんのだが。
- 856 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:49:26 ]
- >>850
なぜなら、manpage は bcc じゃないから。 戻り値よりも、obj ファイルや exe ファイルが生成されてるかどうかを見た方が楽なんじゃないか。
|

|