1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
83 名前:デフォルトの名無しさん [2007/01/10(水) 18:09:20 ] それは大丈夫です。>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。 for構文だからi=10のときはi<=10を満たすので「cout<<n<<" "<<i<<endl;」を実行しこのときiは10となります。 その次にiを++するのでi=11となりi<=10を満たさなくなるので、i=11が出力されるはずがないと思ったのです。 なんでなんでしょうか。
84 名前:デフォルトの名無しさん [2007/01/10(水) 18:11:51 ] n i 0 1 0 2 ・・・ 0 9 0 10 0 11 ・・・ 10 1 ・・・ 10 10 10 11 となります。変だと思うのです。
85 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:19:16 ] >>84 2行目の >cout<<n<<" "<<i<<endl;} が余計だろう。ここのi は既に内側のforのスコープから外れてるぞ。
86 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:21:13 ] >>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。 >>84 の実行例はiは1-11になってるように見えるが? >>80 で書いたコードと>>84 で実行してるコードは違うだろ?
87 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:31:57 ] [完成] int _tmain() { for(n=0;n<=10;n++){ for(i=0;i<=10;i++){ cout<<n<<" "<<i<<endl;} //cout<<n<<" "<<endl; } } [原因] 指摘をもとに2行目を削除したところ正しく出力されました。ありがとうございました。 [謝辞] >85 ご指摘の通りでした。2行目が必要だと思っていましたが、実際には不要なものだったのですね。 >86 申し訳ないです。慌てていて>84でiが0の場合が抜けています。 みなさま迅速なご指導ありがとうございました。これで数時間悩んでいてほとほと困っていましたが 解決することが出来ました。 [結果] n i 0 0 ・・・ 0 9 0 10 ・・・ 10 1 ・・・ 10 10
88 名前:デフォルトの名無しさん [2007/01/11(木) 19:05:47 ] Cのprintfにて文字色を変えて表示させたいのですが \033[31m のような指定では無く RGB指定で細かくして表示させたいのですが そのようなことは可能でしょうか?
89 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:38:08 ] 世の中そういうことができる環境があるかもしれない。 或いは自分で作ればそういうことだってできるだろう。
90 名前:よろおね [2007/01/11(木) 22:27:20 ] 知人からソースを貰いました。 コンパイルしようとしたら $ gcc main.c main.c:6:19: stdio.h: No such file or directory main.c:7:20: string.h: No such file or directory main.c:8:20: stdlib.h: No such file or directory となりました。 「stdio.h, string.h stdlib.h も寄越せ ゴルラ!」と言って一週間。 未だに貰えません。 どうしたらいいでしょう?
91 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:03:48 ] 明らかにあなたのビルド環境が異常です
92 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:07:36 ] >>90 stdio.h, string.h stdlib.hは知人から貰うようなものじゃない。 コンパイラをダウンロード・インストールすれば付いてくるもの。 環境さえまともに整えられないのか?
93 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:14:02 ] 知人も在る場所知らない希瓦斯
94 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:16:11 ] ワロス.なんでgccがあってstdio.hがねーんだよ(w ホラヨ(w つ ftp.gnu.org/gnu/glibc/glibc-2.5.tar.gz
95 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:18:11 ] どうせ #include "stdio.h" とか書いちゃってるオチだろ。
96 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:20:47 ] >>95 その場合も、見付からなければ<stdio.h>と書いたのと同じ方法でヘッダを探すことになっており、 gccもそれに則っているから問題ない。
97 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 11:35:58 ] ↓このあと、>95 の「釣れた」宣言
98 名前:偽95 mailto:sage [2007/01/12(金) 15:21:42 ] Fish On!! かかったかかったーー!! ん?あっれぇ〜 根掛かりだ〜
99 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:08:14 ] わらたw
100 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:58:50 ] >>98 =99 かわいそす
101 名前:デフォルトの名無しさん [2007/01/13(土) 14:28:22 ] Microsoft Visual C++ 2005 で.cppのファイル開いてもビルトがでない。 どーやってコンパイルすればいいの!!
102 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:07:57 ] ‖ ___ ‖ / `ヽ‖ ,:' 、ゑ ,' ; i 八、 |,! 、 ,! | ,' ,〃ヽ!;、 |!| l川 l リへ'==二二ト、 リ川 !| i′ ゙、 ', ', lルl ||,レ′ ヽ ,ノ ,〉 |川'、 ,,.,.r'" ,,ン゙ `T" ! ,/ '.ノ,/| / ,!´ !゙ヾ{ | / ,' i ゙ ! ,l゙ ,r‐'ヽ-、! ', l| { `ヽ ! 「゙フ ,>┬―/ ; i,`{ / /リ川' ', ゙、 / ,/ ゙、 ゙、 ノ / ', `、 \_/ ; ゙、ヽ、 l__ ! ___〕 ,、l  ̄`‐┬―r┬‐r'´ `'‐'′ | .! | | | | .| |
103 名前:偽95 mailto:sage [2007/01/13(土) 16:09:17 ] 新規作成→新しいプロジェクト→特にソリューションディレクトリが必要なければチェック消す →プロジェクト名(好きな名前で結構)[OKを押せば勝手に指定した場所の所にプロジェクトフォルダが出来る] →OKを押して次を押す→windowsアプリケーションじゃないならプリコンパイル済みヘッダーのチェックを消す →コンソールアプリケーションチェック、空のプロジェクトチェック、そんで完了押す →左のソースファイルフォルダ右クリック新しい項目追加 →C++ファイルを選んで名前を付けて追加(C言語なら拡張子を.cにする) →ソース書いてコンパイルしてビルドしてデバッグなしで開始(デバッグするならデバッグで)
104 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 21:06:16 ] C++で文字列の先頭から、途中までの文字列が一致するか否かを判定する関数は ありますか? EX: 比較文字列 2ch 比較対象文字列(一致) 2ch close 比較対象文字列(不一致) 3ch open こんな感じで判定できるような関数なのですが・・・・・? Windows2000 VS2005 SDK
105 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:03:36 ] string
106 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:52:02 ] 不可解なエラーに悩まされています。 原因はどの辺りにあるかわかりますか? たとえば、グローバルで定義したint a、int bがあるとして、 プログラム中でa++したときに、なぜかbも一緒に++されてしまう。 aをaaaに変更してみたりその他の関係のない変数の変数名を変更してみたり、 int a=0;と定義するとエラーが出なくなることもある。 しばらくコーディングを進めると今度は違う変数同士が干渉し始める。 どの辺りに起因して同じ領域に違う変数が割り当てられてしまうのか、見当もつきません。 WinXP gcc(cygwin)
107 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:27:22 ] >>106 gccなんてクソコンパイラ使ってるからだよ。m9(^Д^) プギャー
108 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:36:02 ] >>106 m9(^Д^) プギャー
109 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:37:55 ] >>106 よくわからんで作ってることが原因だな
110 名前:106 mailto:sage [2007/01/13(土) 23:48:16 ] >>109 わかりました。基本から出直してきます。 ご返答ありがとうございました。
111 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 00:00:46 ] &b(a); とか?
112 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:25:42 ] doubleの要素型で、要素数が5の配列の全要素に0.0を代入して表示するプログラムが分かりません。教えて下さい。C++です。
113 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 14:06:06 ] #include <iostream> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++) std::cout << i << " : " << d[i] << std::endl; return 0; }
114 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:00:16 ] >>113 ありがとうございます!けど実行すると、0が表示されてしまいます....
115 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:06:08 ] 確認のために0を表示するように書かれているからだ。
116 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:06:50 ] 0というより、0になった配列の各要素と言うべきだな。
117 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:12:23 ] 0 じゃなくて 0.0 を表示したいのではないかと esp
118 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:15:03 ] ほれ #include <stdio.h> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++){ printf("%.1lf\n", d); } return 0; }
119 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:52:50 ] >>117 そうです。 >>118 すいません。それはC++の場合はどうすればいいんでしょうか?
120 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:57:39 ] #include <cstdio> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++){ printf("%.1lf\n", d); } return 0; }
121 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:58:12 ] >>120 ありがとうございます。
122 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:08:17 ] d[i]
123 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:44:48 ] Cプラプラで0.0から1.0まで0.001おきに、その値と、その値の2乗を表示するプログラムって、どう作ればいいんですか?
124 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:48:56 ] >>123 まずはC++のコンパイラを入手し、お前が使ってるPCにインストールする。
125 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 20:08:02 ] C++なら_asmが使えるからアセンブリで書いてやろうと思ったけどやめた
126 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 22:47:07 ] int data[10]={0};//dataの中身を全部0で初期化 これをクラスで記述する方法ってあるんでしょうか struct a{ int data[10]; a():??{} };
127 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 23:44:50 ] a() : data() {}でできない? できないならおとなしく、コンストラクタのブロックの中でstd::fillでもするしかないな。
128 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 00:37:06 ] >>127 出来ました!こんな書き方があったとは ありがとう
129 名前:デフォルトの名無しさん [2007/01/15(月) 04:20:32 ] 画像のピクセルサイズを取得したいのですが どうすれば取得できますか?
130 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 09:05:21 ] 画像ファイルの構造を知る
131 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:38:57 ] 男ならwaveだろうがbmpだろうが黙ってバイナリfstream
132 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:29:29 ] >>129 BITMAPINFOを足がかりに
133 名前:Cはできた(過去形)人 [2007/01/15(月) 18:29:34 ] BorandC++を使ってるんですが・・・ <iostream>ファイルをオープンできません とでてコンパイルできません・・・ いったいどうすれば・・・
134 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:34:02 ] >>133 お前じゃどうしようもないから諦めろ
135 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:46:29 ] >>133 普通にググったら見落としに気づくかもよ。
136 名前:デフォルトの名無しさん [2007/01/15(月) 18:54:30 ] 分割コンパイルしたオブジェクトファイルをmain.oも含めて静的ライブラリに まとめた場合、一般にそのライブラリのみで実行ファイルをビルドすることは できるのでしょうか? GCCだとできたのですがVCやBCCだとどうなんでしょう? libfoo.aがmain.o, hoge.oで構成されている場合、GCCの例だと gcc -o exefile libfoo.a でexefileという実行形式を作成できました。
137 名前:デフォルトの名無しさん [2007/01/15(月) 18:57:51 ] 256*256の二次元配列を作りたいのですが、実行するとStack overflowとでてしまいます。 どうにか回避する方法はないでしょうか?
138 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 19:06:23 ] >>137 ヒープに割り当てる
139 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 19:10:57 ] mainを含んだ静的ライブラリってのは、 Win32のスクリーンセーバライブラリがそんな感じだな。
140 名前:137 [2007/01/15(月) 19:36:29 ] >>138 すみません。 ヒープに割り当てる方法を教えてください。
141 名前:136 [2007/01/15(月) 19:39:26 ] 今vc8で試してみたのですができませんでした。 具体的には cl /EHsc /c main.cpp lib.cpp lib /out:library.lib main.obj lib.obj cl /Feout library.lib out.objが開けないとエラーがでてしまいます。
142 名前:デフォルトの名無しさん [2007/01/15(月) 19:46:55 ] >>140 ヒープに割り当てるというのはmalloc(Cの場合)やnew(C++)などで 動的にメモリを確保することです。 あとは調べればわかるかと思います。
143 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 21:39:29 ] >>141 できたぞ。 cl /EHsc /Zl /c test.cpp lib /out:hoge.lib test.obj link /machine:x86 /entry:mainCRTStartup /out:HOGE.EXE msvcrt.lib hoge.lib /entryの代わりに/subsystem:consoleでもうまくいった。 またcl経由でリンカを呼び出してもできる。 cl /MD hoge.lib /link msvcrt.lib /machine:x86 /subsystem:console いずれにしてもLNK4001(オブジェクトファイルがない)という警告が出る。
144 名前:デフォルトの名無しさん [2007/01/16(火) 15:11:25 ] home.hiroshima-u.ac.jp/~m052291/sdk/index.cgi?event=view&num=246 どこでなにやってるか全然ワカランので、中盤以降に説明つけてください! あともう少し素人が作ったっぽくなりませんか?
145 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 16:04:06 ] >>144 それだけ素人丸出しなら充分だと思うが。
146 名前:デフォルトの名無しさん [2007/01/16(火) 22:33:51 ] Windows上で動くプログラムには仮想メモリが割り当てられてて プログラムからは仮想メモリしか見えないんだよね? じゃあメモリエディタってどうやってんの?
147 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 22:50:39 ] 適切な権限さえあればよそのプロセスのメモリだって読み書きできる(真っ先に思い浮かぶのはデバッグ用途)。 大抵は権限の設定なんてやっていないから、同じユーザのプロセスならだいたい読み書きできると思っていい。
148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:14:54 ] Windowsカーネルは全部の仮想メモリを知ってるから、 API叩いて教えてもらうんだよ。
149 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 11:27:50 ] 実際に物理的なメモリを書き換えているとは限らない ひょっとするとあなたの書き換えた場所はディスク上の一部かも知れない
150 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:10:28 ] 質問なんですが、C++の問題集でお勧めなのはないでしょうか? 参考にしたいのでお願いします。
151 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 03:22:51 ] >>150 C/C++問題集スレ pc10.2ch.net/test/read.cgi/tech/1168663908/
152 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 13:53:15 ] >>151 ワロタ
153 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 12:08:48 ] Cの経験が少しあってC++をはじめた者です。 憂鬱なプログラマのためのオブジェクト指向開発講座(第2部第5章p116)で、 「コンストラクタを使って、定数メンバの初期化を行うことができます」 と書いてありました。定数の初期化って、定数はあらかじめ 定義されているものだと思うんですけど、 どういうことでしょう?
154 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 12:21:08 ] 定数メンバと定数は違うだろ
155 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 15:25:31 ] static const double a=1; じゃだめなのですか?
156 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 16:04:03 ] 153は非静的メンバの話だと思う。
157 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:09:46 ] >>154 >定数メンバと定数は違うだろ 定数って const int a; とかですか?
158 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:29:36 ] 憂鬱本↓ メンバ初期化の方法はLIST6のように考えるのが普通でしょう. 確かにこのように書くことは可能です.・・・しかし,これは進められる書き方ではありません.なぜならば,これでは定数のデータメンバを初期化することができないからです. クラスのメンバデータには定数も使用することができます.その初期化を行うのも当然コンストラクタということになるでしょう.しかし,コンストラクタとはいえ,やはり関数です.その中で定数を書き換えることはやはりできません. さてそれでは,別の方法で定数メンバを初期化することは出来るのでしょうか.そのような特別な方法が用意されているのでしょうか. これはそのような方法が存在します.C++では,コンストラクタがメンバを初期化するために新しい構文が設けられています.メンバの初期化はLIST7のように行います.
159 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:31:59 ] LIST6:データメンバの初期化 Person :: Person () // コンストラクタの実装部 { age = 0 ; // 年齢の初期化 name = NULL ; // ポインタの初期化 } // しかしこの方法は薦められない! LIST7:コンストラクタでのメンバ初期化 Person :: Person () : age ( 0 ) , name ( NULL ) // 正しい方法 { // 何もしない }
160 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:25:26 ] _, ._ (;゚ Д゚) …?
161 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:38:24 ] 新版も出たことだし、Effective C++ くらい買いなさい。
162 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 19:07:38 ] >>158 >これはそのような方法が存在します 日本語でおk
163 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:09:24 ] (これ、Visual C++のスレで質問するべきなのかもしれませんが) 標準C++というのでしょうか、windowsコンソールアプリケーションの 文法で、Visual C++のよなwindowsプログラミング(ファイル[メニュー]や ボタンを付けたいだけですが)をすることってできるでしょうか? やはりそれはVisual C++でしかできないのでしょうか? 環境はVisual C++ 2005 Express Edition使っています。
164 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:26:27 ] >>163 Visualという単語で勘違いしたのかな?VC++でコンソールアプリも書けます。 VC++でコンソールアプリを書いてもWindowsアプリを書いても、VC++の文法は同じです。 Windowsアプリの開発環境はVC++だけではありません。VB、Delphi等々色々あります。
165 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:53:02 ] >>164 返信感謝します。 (私があまり理解していないので、言葉がうまく見つかりません) 普通(?)のC++(コンソールアプリ)は、やったことがあるんですが、 windowsアプリケーションのソースを見たところ、 “ハンドル”という言葉が出てきたりして、 私が今まで勉強したC++と少し違うと思いました。 文字列に関しても、宣言が下のように違うようです。 string word @ ↓ string^ word; A winwosアプリをする場合は、新たにAのような文法を勉強しなければ ならないんですよね?
166 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 15:42:41 ] ないない
167 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:20:59 ] ルンゲ・クッタ法を用いてX-Y軸上に楕円運動の軌道を描く際の、各点においてのX軸Y軸方向への速度をV,Uとして時間T毎にファイルに書き込みたいのですが、どういった書き方ならば綺麗に描けますか?
168 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:28:14 ] >>166 どっちでしか?
169 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 17:54:33 ] >>165 「string^ word;」がエラーにならないとはちょっと思えない。 “ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。 それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。 まぁ、まずはWinアプリの入門書か解説ページを読んで。
170 名前:165 mailto:sage [2007/01/24(水) 18:11:36 ] 返信ありがとうございました。 >“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。 >それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。 前者だと思います。 ↓のように使用されていて、 文字列型のハンドル、オブジェクト方のハンドルがあると書いてありました。 private: System::Void buttonAdd_Click(System::Object^ sender, System::EventArgs^ e) { Debug::WriteLine("追加ボタンをクリックしました"); // 品名、分類、金額を取得する String^ name = textName->Text; String^ kind = comboKind->Text; String^ money = textMoney->Text; String^ out; out = String::Format("品名:{0} 分類:{1} 金額:{2}", name, kind, money ); Debug::WriteLine( out ); } >まぁ、まずはWinアプリの入門書か解説ページを読んで。 普通のC++を知っているだけでは、windowsプログラミングは無理のようですね。 じっくりやってみようと思います。
171 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 19:03:37 ] >>170 あぁぁ、C++/CLIですね。だと文法も拡張されてるそうです。 新しいことをあまり知らないくせにレスつけました。すいません。 でもWinアプリを書くのにC++/CLIじゃないとダメってことはないですよ。
172 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 20:38:23 ] >>151 とりあえず、参考にしてみます。
173 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:12:01 ] >>170 そのハンドルは169の言っているものとは違う。 171も言っているが、それは.NET Frameworkを使って動くプログラムを書くために作られたC++/CLIという言語のプログラム。 普通のCもしくはC++を使ったWindowsプログラムはまた別物。
174 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:38:23 ] >>171 ,173 指摘していただき感謝します。 C++/CLIは別なんですね。知りませんでした。 私はC++/CLIでない普通のWindowsプログラミングをしたいのですが、 その場合は、普通のC++と同じ文法でやれるのでしょうか? VC++2005Express使っているんですけど、 その場合、プロジェクトの作成の仕方は、 [ファイル]→[新規作成]→[プロジェクト] から、[新しいプロジェクト]ダイアログで、 [プロジェクトの種類]で、[win32]で選ぶのかと思うんですが、 この時[テンプレート]で選択できるのが[win32コンソールアプリケーション] だけになってしまいます。 やり方が違うと思うんですが、 教えていただけますか?
175 名前:デフォルトの名無しさん [2007/01/24(水) 23:13:41 ] >>174 VC++2005ExpressEditionでwin32アプリケーションを作るには www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ ↑で環境をもうちょっと追加しなければならない。 ちなみに .NETアプリってのはCLRとか書いてるやつね win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、 window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。 www.kumei.ne.jp/c_lang/ ↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。 VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変 WindowsSDKでの開発がめんどくさいから MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。 .NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
176 名前:174 mailto:sage [2007/01/24(水) 23:45:24 ] >>175 丁寧な説明ありがとうございます。 >VC++2005ExpressEditionでwin32アプリケーションを作るには >www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ >↑で環境をもうちょっと追加しなければならない。 早速入れました。 >win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、 >window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。 >www.kumei.ne.jp/c_lang/ >↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。 >VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変 > やってみようと思います。 >WindowsSDKでの開発がめんどくさいから >MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。 >.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。 > わかりました。 CLRも考えようかと思います。
177 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 00:46:29 ] 質問です、以下の構造体があったとします↓ struct Test{ int nMem; char strMem[20]; }; 上記の構造体に、関数をひとつ追加します。 struct Test{ int nMem; char strMem[20]; void Clear(){ nMem = 0; strcpy(strMem, ""); } }; そして両者のsizeofをとってみたのですが、両者とも24バイトとなりメンバ関数によるサイズの増大が見られません。 これは、コンパイラがTest::Clear()の呼び出しを該当するメモリアドレスに置換しているからなのでしょうか? 多分そうだと思うのですが、参考となるようなものが無く………詳しい方、宜しくお願い致します。
178 名前:177 mailto:sage [2007/01/25(木) 00:47:31 ] 追記です、実行環境はVS2003、VS2005、BCCです。
179 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 02:54:53 ] >>177 メンバ関数も、機械語のレベルにすれば単なる関数であることに変わりはない。 Cで擬似的に書けばこんな感じになる。 struct Test { int nMem; char strMem[20]; }; void Test_Clear(Test* this) { nMem = 0; strcpy(strMem, ""); }
180 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 11:58:29 ] C++の例外の使い方を解説した参考書で、オススメのものを教えてください。 文法自体の解説ではなく、使いこなしのテクニックなどについてです。
181 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 01:00:56 ] >>180 例外の落とし穴的なことなら Exceptional C++ にあるよ。 # もし持ってないんだったら C++ 使いとして C++ in-Depth Series は # 揃えておくことをオススメするですよ。
182 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 14:17:33 ] >>181 ありがとうございます。 洋書には、知っておくべきノウハウの本があるのに、 和書には、言語仕様の解説本しかないんですよね。 洋書で足りてるから書く必要がないのかもしれないけど。
183 名前:177 mailto:sage [2007/01/26(金) 15:34:18 ] 遅れてしまいました、179さんありがとうございます。