- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sageは禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.36【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1175436073/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 267 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:39:57 ]
- なるほど。
独習C++で「展開されるか否かはコンパイラによる」って書いてあった気がしたから 低血圧な俺は心配しすぎで心拍数上がってぶっ倒れそうだったけど安心した。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:52:02 ]
- >>266
標準ライブラリは滅多に出てこないが、 Boostなんかの外部のライブラリのヘッダではよく出てくるから、 #pragma warningが手放せない。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:25:06 ]
- 自作の型に対し、プリミティブな型と同じような四則演算を行う場合って、
+ - * / % += -= /= %= ++ -- の12個全部定義しないとダメ?
- 270 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:38:45 ]
- boost::operatorsを使えば手間が省けるかと思う。
- 271 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:52:35 ]
- >270
boostに頼るのが現実的っぽいですね。ありがとうございました。 しかし、これを使わないとすると一体何パターン定義すればいいのやら……比較やら何やら。
- 272 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 00:02:31 ]
- 何の型かは知らんが、例えば同じ * でも
MyType * MyType、MyType * int、int * MyType は別定義かもしれんしな 後 const ありなしとか
- 273 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 00:16:17 ]
- 非メンバな演算子でもboost::operatorで定義出来るんですかいね?
- 274 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 08:22:41 ]
- >>273
クラス定義内で friend 関数を定義することで実現するみたい。
- 275 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 11:34:58 ]
- VC++2003にSP1あてたら強制コンパイル(Ctrl+F7)できなくなった
のですが、どなたか対処法知りませんか?
- 276 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 11:57:41 ]
- C/C++の話ではないような・・・
オプションのキーボードで、ビルドのコンパイルがどれに割り当てられているか見てみては
- 277 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 13:03:36 ]
- >>275です。
>>276さんレスありがとうございました。 ここはスレ違いっぽいとは思いながら該当するスレがみつからず 書いてしまいました。すみません。 書き方が悪かったです。 キーの割り当てがどうという問題ではなく、 1度コンパイルしたソースファイルを もう1度強制的にコンパイルすることがSP1になってから できなくなってしまったのです。 適切なスレ探して聞いてみます。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 13:42:29 ]
- Ctrl-F7は普通のビルドだから強制でもなんでもないだろ
リビルドしたいのか?
- 279 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 14:05:34 ]
- >>277
コマンドラインからdevenv /rebuildしたらどうなる?
- 280 名前:275 mailto:sage [2007/05/18(金) 14:26:11 ]
- >>278さんレスありがとうございました。
こっちのスレで同様な質問かいてしまいました・・・。 Visual Studio IDE環境 pc11.2ch.net/test/read.cgi/tech/1115707321/ 要はOBJファイルが存在する状態でも リビルドではなく普通にもう1度コンパイルかけたいだけなんです。 理由は、ソリューションが巨大なため単にリビルドでなくて一部のみコンパイル かけたいときがあるので・・・。 >>279さん OBJ消したり、リビルドすれば大丈夫なのは分かっているのですが、 業務上他のVer.(2005など)のVisualStudioも使うので同様の操作 で何故できないのかと。 ちなみにSP1あてる前は普通にできてたことですし、 VS6.0SP6,2005,2005SP1でも同様に問題なくできていました。
- 281 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 14:33:06 ]
- コンパイルできなくなったってだけじゃ何もわからんよ。
具体的にどうなってんのか(ビルドログとか)晒せ。
- 282 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 14:37:38 ]
- 普通build っつーのは src target の依存関係を追って時刻更新がかかったもだけを
更新する作業だと思うのだが… make -u はリビルドと同じだし、なんのことかわかんね<強制ビルド まさか単に時刻が崩れているおち?
- 283 名前:275 mailto:sage [2007/05/18(金) 14:51:25 ]
- ログ晒します。
1回目のコンパイル。当然通常通りです。 ------ ビルド開始 : プロジェクト : AAAAA, 構成 : Debug Win32 ------ コンパイルしています... BBBBB.cpp WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server) C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afx.h(281) : warning C4005: 'ASSERT' : マクロが再定義されました。 コマンド ラインの引数 : 'ASSERT' の前の定義を確認してください。 ビルドログは "file://d:\AAAAA\Debug\BuildLog.htm" に保存されました。 AAAAA - エラー 0、警告 1 ---------------------- 終了 ---------------------- ビルド : 1 正常終了、0 失敗、0 スキップ 2回目のコンパイル。スキップされてしまいます。 ------ ビルド開始 : プロジェクト : AAAAA, 構成 : Debug Win32 ------ ---------------------- 終了 ---------------------- ビルド : 1 正常終了、0 失敗、0 スキップ ソリューション壊れてるのかな・・・? ちなみに2005で同等のソリューションでは1回目も2回目も同じログはきます。
- 284 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 14:58:05 ]
- むしろ2回目も同じログ吐くほうがおかしくないか・・・
PCの時刻とファイルのタイムスタンプのチェック、 あと新規でソリューション作って試してみて
- 285 名前:275 mailto:sage [2007/05/18(金) 15:06:39 ]
- >>284さん
>むしろ2回目も同じログ吐くほうがおかしくないか・・・ ですが、今までSP1あてる前とか、VC6.0のときもこんな動作 してなかったのですが。 PCの時刻やタイムスタンプが壊れていることはないです。 ソリューション大きすぎるとおかしいんですかね? VC6やVC2005で新規ソリューションで同様の操作してみます。
- 286 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 15:07:45 ]
- ログじゃなくてゲロ吐きそう・・・・
- 287 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 15:09:19 ]
- OBJ とかの中間生成物が違うフォルダを指してるとか read-only とかそういうことないか?
- 288 名前:275 mailto:sage [2007/05/18(金) 15:26:53 ]
- VC6.0MFCアプリで新規プロジェクト作ったら、
2回目スキップされました。あれ?2003SP1と同じでした。 ・・・ VC2005のMFCアプリの新規ソリューションも 2回目スキップされました・・・。 ごめんなさい。これがデフォルト動作なんですね・・・。 でもそうすると今あるこの巨大ソリューションの2005版で こうならないのは何故?? いや、そもそも2003SP1当てる前はスキップされなかった ですし。 プロジェクトファイルを起こすところからやりなおした方が よさそうですね。 皆様お騒がせしました。ありがとうございました。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 15:47:30 ]
- >>288
巨大ソリューションの日付が未来。
- 290 名前:288 mailto:sage [2007/05/18(金) 15:48:15 ]
- SP1前後で違うんだったな。無視してくれ。
- 291 名前:290 mailto:sage [2007/05/18(金) 15:50:33 ]
- 289 だった…orz
- 292 名前:デフォルトの名無しさん [2007/05/18(金) 18:43:13 ]
- ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3998.zip
画像の情報を圧縮するプログラムをつくろうと思い 今、その前段階で 圧縮せずにそのままの情報量で画像を出力するプログラムをつくっているのですが 元の画像がほぼ復元されるはずなのに全くかけ離れた結果が出てしまいます どこを修正すればよいのでしょうか? 環境は OS:Linux GCC:4.1.2 言語:C++ です
- 293 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 20:22:19 ]
- >>292
デバッグ依頼なら他スレ逝ってくれ
- 294 名前:デフォルトの名無しさん [2007/05/18(金) 21:33:10 ]
- 戻り値として配列を戻したいんだが、そういう時ってのはどうやればいいんでしょうかね?
戻り値の型はどうすればいいのか、return の後に書くのは関数内の配列名でいいのか、関数を呼び出した場所の=の左オペランドはどういう型にすればいいのか 教えてください。
- 295 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:39:07 ]
- 引数に配列のポインタ受け取ってそれを操作すればいいような気もする
- 296 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:41:17 ]
- C++でnew演算子には三種類あるらしいですが
普通のnew、placement new、あともう一つは何ですか?
- 297 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:41:49 ]
- >>294
具体的なテストケース書いてみ
- 298 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:42:54 ]
- というよりCではそれが一番使われている。
ほかには、構造体を返したりC++ならstd::vectorを使ったりする方法がある。 関数内でメモリ確保して、呼出元で解放してもらうという手もある。
- 299 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:43:44 ]
- >>296
new[]のような気がするが、そうするとplacement new[]も考えられるんだよな
- 300 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:45:19 ]
- new(nothrow) のことか?
- 301 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:48:47 ]
- >>300
第三のnewはそれでしたか…名前からするにbad_alloc例外を投げないnewってところかな? ともあれ回答ありがとうございました
- 302 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:49:41 ]
- >>294
配列を含む構造体を使う。 C++ なら std::vector も使える。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:50:49 ]
- new(nothrow) は placement new の一種だろう。
三種類あると言ってる人の認識がどうなってるか知らないけど。
- 304 名前:294 [2007/05/18(金) 22:06:48 ]
- //ん〜、こんなんでしょうか?(実際作りたいプログラムはこんなじゃないですけど
#include<iostream> using namespace std; int factor(int a[]){ for(int i =0; i<5 ; i++){ a[i]=i+1; } return a; } int main(){ int a[5]; a = factor(a); for(int i =0; i<5 ; i++){ cout <<a[i]; } return 0; } て、コンパイルが出来ませんでした。コンパイラはVC。メッセージは次の通りです。 test.cpp(9) : error C2440: 'return' : 'int []' から 'int' に変換できません。 この変換が可能なコンテキストはありません。 test.cpp(14) : error C2440: '=' : 'int' から 'int [5]' に変換できません。 配列型への変換はありませんが、参照またはポインタから配列への変換があります。 やっぱり引数と戻り値の型らへんの知識があいまいなので、どうやって渡してどうやって戻せばいいのか分かりません。 このコード直してくれたりすると、ありがたいんですけど・・・wさすがに無理な頼みでしょうか
- 305 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 22:23:24 ]
- STL使った方が遥かに楽だと思う
#include <vector> #include <iostream> int factor(std::vector<int>& in) { enum { NUM=5 }; typedef std::vector<int>::size_type vec_sz; in.reserve(NUM); for (vec_sz i = 0; i < NUM; ++i) in.push_back(static_cast<int>(i)); return 0; } int out(const std::vector<int>& in) { for (std::vector<int>::const_iterator i = in.begin(); i != in.end(); ++i) std::cout << *i << " "; return 0; } int main() { std::vector<int> v; factor(v); out(v); return 0; }
- 306 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 22:28:29 ]
- >>304
JavaかC#でもやっていたのかもしれないけど、 まずCには「配列を渡す」という概念自体がない。 ポインタの型で配列のサイズを指定するというやり方が ないわけでもないけど、やはり普通は配列の先頭の要素の アドレス(ポインタ)を渡して処理をすることになる。 その辺が面倒だと言うのならSTLか配列かクラス使う。
- 307 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 22:32:47 ]
- こんにちは。Cでプログラムをしているのですが、
_beginthread()で作成したスレッドをCloseHandleで終了させる時に、 デバッグなしで実行すると何もエラーは起こらないのですが、 デバッグありで実行すると、例外が発生してしまいます。 おそらくCloseHandleで出ているエラーなのですが、正常な終了方法ではないのでしょうか? なんか、_freeptd(ptd);の所に矢印があります・・・。 スレッドの作成の部分と終了の部分は下のようになってます。 hThread = (HANDLE)_beginthread(connect, 0, NULL); CloseHandle(hThread_connect);
- 308 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 22:36:27 ]
- >>307
_beginthread のマニュアルに _beginthread に対応する関数書いてない? malloc と fclose は対応してない様に 違う関数呼ぶと問題が多いよ
- 309 名前:デフォルトの名無しさん [2007/05/18(金) 22:37:48 ]
- _beginthreadで開始したスレッドはCloseHandleしちゃ駄目。
- 310 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 22:38:24 ]
- >>303
new(nothrow) は確保に失敗したら NULL を返す new 。 placement new は既に確保してあるメモリを利用する new 。 全然違う。
- 311 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:11:19 ]
- >>308
_endthreadというのがあって、そのスレッドの最後に _endthread();すればスレッドが終わるようなのですが、 スレッドの外から強制的にスレッドを終わらしたいのです。 しかも_endthreadは引数を持たないので複数スレッドを走らせている場合は どのようにスレッドの外から強制的に終わらせればいいのか・・・ >>309 そうなんですか・・・。それはエラーが出るわけですね;; ん〜・・・
- 312 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:20:19 ]
- >>310
new に与える追加の引数のことを総じて new-placement と言う。 (5.3.4) 元々は new (place) T として配置に使う構文として追加されたから こんな名前になってるんだろうけどね。
- 313 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:24:43 ]
- 単純な方法としては
生成時にスレッドを生成して、消滅時にスレッドを終了させる っていうスレッドそのものを表すクラスは作ってそいつに自殺するように命令するとか となるとそいつらを生成、管理するクラスが必要になるわけで…
- 314 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:26:00 ]
- ExitThreadでスレッドを終了させた場合、その終了させたスレッドが
プロセスの最後のスレッドであれば、そのプロセスも終了するっぽいので、 これはこれで非常に使いにくいです。一体どうすれば・・・
- 315 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:28:24 ]
- >>311
短い答え: スレッドを強制的に終了させる必要などないような設計に汁 少し長い答え: _beginthreadex(), TerminateThread()を使え
- 316 名前:315 mailto:sage [2007/05/18(金) 23:29:08 ]
- おっと後者のほうが短かったぜ
- 317 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:44:55 ]
- >>315
ありがとうございます。Exではありませんが、 _beginthread()とTerminateThread()でエラーが出ないようになりました。 色々調べたところ、あるサンプルプログラムにおいて TerminateThread()の後にCloseHandle()で更にハンドル開放を行ってますが これは必要なのでしょうか?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 00:05:57 ]
- >>317
イベントを受け取ったら自分で_endthreadして死ぬようにした方がいいと思う。 スレッドを無理やり止めるってことはどこで止まるか分からないんだぞ。気色悪い。
- 319 名前:315 mailto:sage [2007/05/19(土) 00:12:44 ]
- >>317
長い答え: ヘルプに書いてある筈だが、_beginthread()で開始したスレッドは 自分が終了する時に自分でCloseHandle()を呼び出してスレッドハンドルを 破棄する。言い換えると、_beginthread()で開始したスレッドのハンドルが いつ無効になるか外からは全く分からないので、スレッドのハンドルを 外から何らかの形で使いたいのなら、必ず_beginthreadex()を使え。 _beginthreadex()で開始したスレッドは自分でCloseHandle()を 呼び出さないので、リークを避けたければ誰かが責任を持って代わりに 呼び出してやる必要がある。つまりWaitForMultipleObjects()などを使って 終了を待ち、その後CloseHandle()を呼ぶ必要があるってことだ。 TerminateThread()した場合も同様だな。
- 320 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 00:22:37 ]
- >>318
とりあえずスレッドではrecv()をSOCKET_ERRORが出るまで永遠にループさせています。 サーバーが終了した時などは、自動でループを抜けて終了するのですが、 それ以外にこちらから接続を終了する切断ボタンを用意しています。 そのボタンを押したときに強制的にスレッドを終了させているのですが、 ボタンを押されたイベントをスレッド内で取得してすぐにスレッドを終了させる 事なんて出来るのでしょうか・・・? >>319 丁寧にありがとうございます。とても分かりやすいですw
- 321 名前:デフォルトの名無しさん [2007/05/19(土) 00:41:34 ]
- Linux,gccです。
./aaa 3 2 | ./bbb というように、最初に実行したaaaの結果をパイプでつないで、後ろのbbbというプログラムで操作したいのですが、 うまくbbbに渡すことができません。 aaaは、 1 -2 -1 2 のように出力するので、bbbで int main(int argc,char **argv) として読み取ろうとしているのですが、 argcの値を出力してみると1とでるので、./bbbそのものしか読み取れていません。 自分としてはここで ./bbb 1 -2 -1 2 でargcの値が5になるようしたいのですが、 このようなパイプの使い方は間違いでしょうか?
- 322 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 00:45:11 ]
- >>321
大間違い。パイプの使い方の勉強してらっしゃい。 要は、標準出力と標準入力を繋ぐだけだから。 >>320 おいおい、recv()しているスレッドをいきなり殺しちゃ拙いだろ。
- 323 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 00:51:05 ]
- >>322
ではサーバーとの接続をぷちって切りたい時は どうすればいいのでしょうか?
- 324 名前:315 mailto:sage [2007/05/19(土) 01:01:18 ]
- >>320
長い答え: ブロッキングモードでひたすらrecv()ループをしているんだな。 確かに簡単だが、それでは綺麗にスレッドを終了させられない。 1)ブロッキングモードでrecv()を使う代わりに、 例えばasynchronousモードでWSARecv()+WSAGetOverlappedResult()を使う 2)スレッド間通信用にEventを作る。そのスレッドを止めたい場合は 外からSetEvent()でやんわりと「お願い」する。 3)受信スレッドでは、WSARecv()でトリガした受信の完了と上記のイベントの2つを、 WSAWaitForMultipleEvents()などを用いて、同時に待つようにする。 4)SetEvent()によって待機から抜けた場合は、スレッドが自分で終了する。 こんな感じにすればできるぞ。まあ、基本的なテクニックだが。
- 325 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 01:40:49 ]
- >>324
初めて聞く関数がいっぱい出てきたので ちょっくら勉強してきます!
- 326 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 02:26:01 ]
- まあ要するに、recv()という「外(他スレッド)からブレーク出来ないもの」を使う代わりに
他のもので待機してrecv()ではブロックしないようにする、ということだな。 ネットワークでは誰もが必要とすることなので、対処法もほぼ確立してる。 一般的には「select系」と呼ばれるけど、Windowsにもそれに向けた方法が用意されている。
- 327 名前:デフォルトの名無しさん [2007/05/19(土) 02:54:08 ]
- OS依存しない現時点でC++の仕様を網羅した入門的教科
書ってなにかよいのないでしょうか。 クラスとかSTLのさわりのところまで知っているのですが 数年やっていなかったので今どういう機能が投入されている のかわかりません。図書館でパラパラみていたら 「詳説C++第2版」というのが値段も含めて よいかなと思ったのですが。
- 328 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 02:58:23 ]
- CALLBACK関数内で変数の宣言をすると処理が重くなりますか?
- 329 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 03:04:22 ]
- >>328
↓のどっちと比べて重くなるって言ってるの? 1.CALLBACKじゃない関数で変数の宣言をする 2.CALLBACK関数内で変数の宣言をしない
- 330 名前:328 mailto:sage [2007/05/19(土) 03:05:34 ]
- すみません。
1.CALLBACKじゃない関数で変数の宣言をする です。
- 331 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 03:10:37 ]
- >>327
興味を持ってるところに水を差して悪いが… >クラスとかSTLのさわりのところまで このレベルで「最新の仕様」を知る事に意味があるのか? それならまだ知らないC++の基本を押さえるのが先じゃないか?
- 332 名前:デフォルトの名無しさん [2007/05/19(土) 03:19:00 ]
- C系のを中断してLispとかHaskellあと言語そのものを作ったりとか
とかしばらくやっていたので 今度は今のC++らしいところが全体的に知りたいっていう かんじなんです。 そのあたりの気分を理解していただけますでしょうか。
- 333 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 03:34:23 ]
- それなら安心して Effective C++
- 334 名前:デフォルトの名無しさん [2007/05/19(土) 03:50:56 ]
- 質問ですが、ワードパッドの[ファイル]メニューの[送信]コマンドのように
既存の標準電子メールソフトから送信用ウィンドウを呼び出す機能を実現するには どうすれば良いのでしょうか?
- 335 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 03:53:49 ]
- gcc -pg でコンパイルしたらそれまで出てなかった
Detaching after fork from child process XXX と言うメッセージ出るようになったんですけど、これは何ですか?なにか問題あるでしょうか?
- 336 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 05:25:39 ]
- >>334
「ファイル名を指定して実行」で mailto:: やってみれ
- 337 名前:334 mailto:sage [2007/05/19(土) 06:52:25 ]
- >>336
忝い
- 338 名前:304 [2007/05/19(土) 07:10:12 ]
- >>305
答えてくれてありがとうございました。 が、関数とか全くと言っていいほど知らないので、書いてくださったコードは理解できませんでした・・・。 どうにか自分のコードをちょちょいと直してコンパイルエラー無くなるようにならないでしょうか? もし良ければお答え下さい。 >>306 >JavaかC#でもやっていたのかもしれないけど すみません、全くのプログラミング初めて2ヶ月の初心者です 配列の先頭要素のアドレスを渡すには配列名を書けばいい、と本に載っていましたが、それでいいんですよね? 関数内でいじった配列を、元のところに戻してやるとき、returnの後と、関数の戻り値の型はどう書けばいいのか教えてください;;
- 339 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 07:29:12 ]
- >>338
上手くいかないというのは、知識が足りていない事の証明。 解らないと思うなら、他人に聞く前に死ぬ気で調べなさい。 その方が自分のためだよ。 配列とポインタの関係について、ぐぐりつつ、テストコードを書きつつで、 ちゃんと基本を押さえれば、難しいことはないよ。
- 340 名前:304 [2007/05/19(土) 07:44:56 ]
- そうですね。甘えてました。
出直してきます。 ありがとうございました!
- 341 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 07:47:02 ]
- >>338
配列を関数で変更したいだけなら、例えばこれだけでいい。 void incrementArray(int * foo, unsigned nFoo) { for (int ic = 0; ic < nFoo; ++ic) { ++foo[ic]; } } 別の配列にコピーする場合も、関数で配列を新規に確保するのは判り難いからやめた方がいい。 void copyArray(int * bar, int const * foo, unsigned nFoo) { for (int ic = 0; ic < nFoo; ++ic) { bar[ic] = foo[ic]; } }
- 342 名前:デフォルトの名無しさん [2007/05/19(土) 07:50:14 ]
- コピーのほうの仮引数名は
fooだのbarだの書かずにsrc,destにしようぜ。
- 343 名前:デフォルトの名無しさん [2007/05/19(土) 07:51:54 ]
- Linuxでの初心者の質問です。
C++のstd::sort(v.begin(), v.end())のsort()の実装を見てみたいのですが、 どこをみればよいのでしょうか。 関数ポインタ2つだけを引数にしなくても、v自体を引数にする仕様の方が 自然な感じがするのですが。。。 どなたかよろしくお願いします。
- 344 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 07:55:20 ]
- >>343
それでは「配列」か「コンテナ」か、どれか一つの全体しかソートできない。 例えば、vectorの二番目からソートしたいかも知れない。
- 345 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 07:58:43 ]
- >>343
ディストリビューションによるけど、たとえば /usr/include/c++/*/bits/stl_algo.h 渡しているのは関数ポインタじゃなくて、イテレータオブジェクトだよ。 範囲を指定できるようにしておけば、コンテナの全体をソートするのも 一部をソートするのも同じ使い方にできるから、いい設計。
- 346 名前:332 mailto:sage [2007/05/19(土) 08:48:50 ]
- >それなら安心して Effective C++
どうもありがとうございました。読んでみます。
- 347 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 09:15:15 ]
- >>327
入門的教科書の条件は満たさないが、規格書でも買っとけば?
- 348 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 09:18:23 ]
- >>330
変数の型が糞重たいコンストラクタ/デストラクタを持ってるクラスだったら重くなるだろうね。 まぁ環境による
- 349 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 09:20:24 ]
- mixiで暴れてる猫皇って何者?激しく不快なんだけど
C言語コミュ mixi.jp/view_community.pl?id=1190894 初心者の為のC言語 mixi.jp/view_community.pl?id=485919
- 350 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 09:36:21 ]
- >>327
今書いてるから待ってて。
- 351 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 10:14:01 ]
- 執筆中かよw
いつ出版されるんだ?w
- 352 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 10:34:30 ]
- >>350に期待
- 353 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 10:37:36 ]
- >>327
その本俺持ってるけど、初心者には詳しく書きすぎてあって読んでいる うちに眠くなるよ。 独習C++などの問題集を一通りやってみてはいかがかな。あれなら 一冊やり終えた所である程度の力が付く。
- 354 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:19:22 ]
- >349
諦めとけ。 Kusakabe氏と猫王(猫皇)氏の参加コミュニティには近付かないが吉。 自分も「なるほど、考え方の違いですね」などと発言したら 「バカにするのもいい加減にしてください」とか返されてビックリですよ。詳細曖昧でごめん。
- 355 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:27:12 ]
- ミクシィ(笑)
- 356 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:30:09 ]
- 2ch(笑)
- 357 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:32:14 ]
- 独習C++、exceptional C++以外にC++の問題集ってありますか?
- 358 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:57:35 ]
- C with Classes 問題集
- 359 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:04:49 ]
- そのK氏、マイミクのマイミクなんだよなあ……
なんであんなキチガイと付き合いあるんだろうあの人。
- 360 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:43:19 ]
- A man is judged by the company he keeps.
類は友を呼ぶ。 キチガイの知り合いはキチガイ。
- 361 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:05:02 ]
- つまり359は無自覚のキチガイ
- 362 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:24:16 ]
- 話題に対して関係ない人についての言及は思わぬ蛇を出させる
- 363 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:25:43 ]
- キューを配列で作りたいのですが
enqueue時にデータが一杯の時の処理が上手く出来ません ↓は自分で考えてみたものです kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4006.txt どこが悪いのか教えていただけないでしょうか (headは先頭要素の一つ手前の要素数、tailは最後尾の要素の要素数)
- 364 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 22:20:21 ]
- >>363
デバッグくらい自分でしろよ。 デバッグの過程で学ぶ事は、プログラムを書く事以上にあるんだぞ。
- 365 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:20:06 ]
- わからないので書き込んだのですが…
- 366 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:21:09 ]
- わかってて書き込んでたらそれはさすがにまずいだろ
- 367 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:56:39 ]
- >>363
とりあえず、データが一杯の時に 「どういう動きにしたいのか」 「実際はどういう動きをするのか」 を、まとめてみるのはどうだろうか
|

|