[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 20:16 / Filesize : 201 KB / Number-of Response : 915
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 15



1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
pc12.2ch.net/test/read.cgi/tech/1260842197/
スレを勃てるまでもないC/C++の質問はここで 14
pc12.2ch.net/test/read.cgi/tech/1269273471/

175 名前:デフォルトの名無しさん [2010/05/24(月) 23:48:46 ]
breakするかどうかは、nでは決まらないよね?

176 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:50:19 ]
>>166
JAVAのようには出来ないんですね どうもです。

177 名前:デフォルトの名無しさん [2010/05/24(月) 23:50:41 ]
>>175
あっ!そういうことですか。ありがとうございました_ _

178 名前:デフォルトの名無しさん [2010/05/24(月) 23:51:19 ]
>>172
_asm

179 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:34:49 ]
>>172
お前がやりたい事は無理
そもそもレジスタを理解してないように見えるが

180 名前:172 mailto:sage [2010/05/25(火) 04:56:04 ]
>>178-179
ありがとうございます
最近学び始めたばかりでして知らないことが多すぎたようです

181 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 05:41:35 ]
registerなんてキーワードは忘れてしまってよろしい

182 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:51:56 ]
なんでboostは動的デリータ付きのスコポを用意しなかったんですか?

183 名前:デフォルトの名無しさん [2010/05/25(火) 14:54:32 ]
アメリカ人にとってのアルゴリズム辞典の定番の書籍って何がありますか?



184 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:01:59 ]
AmericanCode第三版

185 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:21:26 ]
現実に存在する本でお願いします。

186 名前:デフォルトの名無しさん [2010/05/25(火) 18:16:33 ]
www.amazon.co.jp/dp/0521701465/

187 名前:デフォルトの名無しさん [2010/05/25(火) 23:39:09 ]
C言語であるメモリアドレスを引数経由で返すような関数を定義する場合
int hoge( void ** );
といった定義をしたのですが、
char *fuga;
hoge( &fuga );
だと、ポインタの方が違うとワーニング
hoge( (void**)&fuga );
だと、strict aliasingのワーニングになってしまいます。

void **という引数指定をするのはおかしな事なのでしょうか?
int hoge( void * );
という定義にするとなんだか意図が異なる関数のような
int hoge( char * );
とポインタの型を決めてしまうのも意図が異なるような
・・・というあたりで行き詰まっています。

188 名前:デフォルトの名無しさん [2010/05/26(水) 00:12:47 ]
4.9:
参照呼び出しに使うため汎用のポインターを関数に渡すのに、 void **を使うことができるか。

A:
移植性まで考れば不可能である。C言語には汎用のポインターへのポ インター型は存在しない。void *が汎用のポインターとして振る舞う のは、他の型のポインターをvoid *に設定したり参照するときに、
自動的に変換が行われるからである。void *以外の何かを指している void **を使って間接参照しようとすると、この変換は実行できない (隠れた正しいポインターの型がわからない)。

189 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:13:25 ]
.libファイルって作ったコンパイラ以外のコンパイラでも使えますか?

190 名前:デフォルトの名無しさん [2010/05/26(水) 00:25:20 ]
互換性があれば使えます。

191 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:27:14 ]
>>188
と、いうことは汎用性をあきらめて特定の型のポインタのポインタとするか
ポインタは戻り値で返すように作るかしかないということでしょうか?
それともほかに常套手段のようなものがありますか?

192 名前:デフォルトの名無しさん [2010/05/26(水) 00:28:45 ]
void* hoge();

193 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:05 ]
正直そこまで汎用性にこだわる理由が分からん



194 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:42 ]
気にせず使え

195 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 02:31:02 ]
  void *p;
  f((void**)&p);
  char *fuga = (char*)p;
てのはどうよ?

196 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:10:39 ]
>>193
こだわるわけでもないですが
いい方法があるなら知りたい使いたいというわけで
ないのなら特に気にしないで適当に

>>195
確かにその方法ならキャスト不要ですが
わざわざそのためだけに別の変数を定義するのも・・・

って事で、気にしないことにします

197 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:02:35 ]
template<class T, class U>
T **pp_cast(U **pp) {
  return reinterpret_cast<T**>(pp);
}

char *p;
f(pp_cast<void>(&p));

198 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 14:00:25 ]
>>131
実は>>109=>>122なんだ
自分のミスを自分で突っ込んだだけなんだよ

199 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:31:44 ]
typedef struct _CELL{
char as_status;
int x;
int y;
int cost;
int heuristic;
int score;
}CELL;

void SetScoreBubbleSort(const CELL*& node, CELL*& list){
int cnt(0);
// ソート開始
while( ( node->cost > list[cnt].cost ) && ( list[cnt].cost != 0 ) ){
cnt++;
}
list[cnt] = *node;
}//続く

200 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:35:54 ]
// 続き
int main(void){
// ---上・省略---
// 床セルのデータ生成(newの二次元配列)
CELL** cell_floor;
int cnt(0);
int cnt2(0);
cell_floor = new CELL* [CellWidth];
for(cnt=0; cnt<CellWidth; cnt++){
cell_floor[cnt] = new CELL[CellLength];

// Astarソート用セルリスト生成(ポインタ型)
CELL** open_list;
open_list = new CELL*[(CellWidth * CellLength)];
// ---途中・省略---
SetScoreBubbleSort(cell_floor[x][y], open_list);//★ここでコンパイルエラー
// ---途中・省略---

// 床セルのデータの削除(deleteの二次元配列)
for(cnt2=0; cnt2<CellLength; cnt2++){
delete[] cell_floor[cnt2];
}
delete[] cell_floor;
// Astarソート用セルリスト削除
delete[] open_list;
}

ってやってるんだけど、コンパイルするとerror C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL' から 'const CELL *&' に変換できません。って出るんだけどどうしたらいい?

201 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:58:46 ]
&はどっから出てきたんだよ

202 名前:199、200 mailto:sage [2010/05/27(木) 16:04:08 ]
&はSetScoreBubbleSortの関数の引数にポインタを渡したいから使ったんだけどマズイかな?

203 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 16:48:54 ]
ポインタ渡すなら&cell_floor[x][y]



204 名前:199、200 mailto:sage [2010/05/27(木) 16:55:58 ]
>>203
配列の形式でそのまま渡せばポインタの先頭アドレスが入ると思って&はつけてなかったけどつけてコンパイルしてみた。
そしたら「error C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL *__w64 ' から 'const CELL *&' に変換できません。」になった。


205 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:21:21 ]
ポインタ受け取る方は const CELL * で

206 名前:199、200 mailto:sage [2010/05/27(木) 17:33:00 ]
>>205
ポインタ受け取る方の参照演算子&を除いて
void SetScoreBubbleSort(const CELL* node, CELL* list)とし、
int main{}の中の部分は
SetScoreBubbleSort(&cell_floor[x][y], *open_list);
としたら一応、コンパイルエラーは取れた。
関数使うときにポインタ渡したいのに*つけるのは気が引けたけど、エラーになる。
関数が抜けたときにまともに値が反映されてるか禿げしく不安・・・。

207 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:47:21 ]
>>206
引数として渡したいものが、
・CELL
・CELLへのポインタ
・CELLへのポインタのポインタ
の何れなのかをはっきりさせよう

208 名前:199、200 mailto:sage [2010/05/27(木) 18:16:14 ]
>>207
引数として渡したいのは「cell_floorの先頭アドレス」と「open_listの先頭アドレス」です。
CELLは型名なので。

209 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:21:10 ]
先頭アドレスならcell_floorだけでいいんじゃね

210 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:22:59 ]
Cのポインタから勉強しなおしだな

211 名前:199、200 mailto:sage [2010/05/27(木) 18:25:16 ]
すみません。引数として渡したいのは「cell_floorポインタ型配列の中のポインタ」の間違いです。

212 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:46:47 ]
>>208
(先頭)アドレスというのは値のことであり、その値の型として
・CELLへのポインタ
・CELLへのポインタのポインタ
があるということ。
同じ値であっても型が違うんだよ。その変がよくわかってないんじゃないか。

213 名前:199、200 mailto:sage [2010/05/27(木) 19:09:04 ]
SetScoreBubbleSort関数では、
1番目の引数の配列の中のポインタの先の値(2次元配列)を
2番目の引数の配列の中のポインタの先の値(1次元配列)と比較した後に
1番目の引数の配列の中のポインタを2番目の中にコピーしようとする意図があります。



214 名前:199、200 [2010/05/27(木) 19:50:46 ]
デバッグしてたらいくつもマズイ点を見つけたので出直してくるorz

215 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 03:42:27 ]
Unix上のCで標準入力と標準出力をファイルとしてオープンする場合に
"/dev/stdin", "/dev/stdout"と記述することができたと思いますが
Windows上のC++(Visual C++ 2010 Express)ではどのように記述
すれば良いでしょうか?

216 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 06:40:03 ]
// fprintf に標準出力したいなら、こうだ。
#include <stdio.h>
main(){
//  FILE *stdout;
  fprintf(stdout,"err");
}

217 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:14:52 ]
>>216
一般のファイルの入出力用に書かれたプログラムをそのまま利用して
標準入出力の読み書きをするにはどうするの?という質問だと思う。

218 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:54:26 ]
FILE *fp;
if(1==0){
  fp = fopen("/dev/stdin");
}else{
  fp = stdin;
}
か、コメントにすればいいのではないか。例をw

219 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 08:57:26 ]
fopen() で con は使えたっけ?


220 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:21:13 ]
>>219
使えるわけないだろ

221 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:59:12 ]
>>220
使えないって確認した?

>>215
Linux     MS-DOS
/dev/stdin  con
/dev/stdout con
/dev/null   nul
のように対応するからやってみて。

>>216
「fprintfに標準出力」じゃ日本語が破綻している。

222 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:34:33 ]
>>221
con は入力には使えるが出力には使えない
お前こそ試したことあるのか?

223 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:52:27 ]
コンパイル環境がVC++ならok



224 名前:221 mailto:sage [2010/05/28(金) 11:54:33 ]
ないよ。だから、試してみてと書いている。
別に、「使えるに決まっているから>220は嘘だ」なんて書いていないから安心してね♥

225 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:55:29 ]
221じゃないけど
bcc5.82ではできた

226 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:14:30 ]
>>215
環境依存せず stdout と stdin を使うのがいい
バカどもの発言には惑わされない方がいいよ

227 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:30:00 ]
>>226
話がわからないのなら、無理に書かなくていいよ。
今は、「標準入出力の環境依存したデバイス名は何?」って話題だからね。

それとも、環境依存しないデバイス名が存在しているなんて妄想に囚われているのかい?

228 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:05:42 ]
>>227
アンカー見てないの?
>>215 に対するレスだよ
お前が振ったくだらん話題には興味ないよ
自意識過剰にも程があるよ

229 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:30 ]
conで開けるのは標準入出力ではなくコンソールだけどね
Windows API の CreateFile で CONIN$ と CONOUT$ というのもある

230 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:32 ]
誰と戦っているのだろう……

231 名前:215 mailto:sage [2010/05/28(金) 15:23:44 ]
fgets(buf, 256, stdin);
で問題なく動きました。
ありがとうございました。

232 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 17:58:46 ]
質問はオープンの仕方だったのにね

233 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:15:13 ]
まあ、ファイルは開かないと読めないものという先入観があるのは
しょうがないだろう。 



234 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:28:00 ]
え?

235 名前:233 mailto:sage [2010/05/29(土) 01:02:34 ]
いや、だからstdinというファイルハンドルが自動的に開いているという可能性を
知らなかったから
「標準入力をファイルとしてオープンする」という質問になっちゃったんでしょう。
>>231結果的に欲しかったのはファイルハンドルだったから。

236 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:40:18 ]
boostが使えない環境でスマポを自作しないといけないとして
どの程度のレベルまで仕様とか実装を練りこむ?

237 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:45:09 ]
>>236
理由が政治的かメモリサイズかによって違ってくるな。

238 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:47:14 ]
ハードウェア的な問題ではない
ただ、boostに不慣れな人がいてとりあえず今回はなしで、という感じ

239 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:56:48 ]
>>238
その判断は今回だけではすまないし後々後を引く。スマポは後から導入が面倒だから今後も見送りになりやすいぞ。
スマポ作るならboost::shared_ptrかstd::tr1::shared_ptrのインターフェース互換にして後にusingで切り替えられるようにすることを勧める。

240 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:58:05 ]
プロジェクトに必要なもの調べてそれだけ実装

241 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:08:37 ]
Googleみたいにboostの一部だけを厳選して使用すればいい
この場合の選定基準は理解が簡単でトレーニングの必要が少ないライブラリだけを許可することかな
shared_ptrやoptionalとか、その辺の解説サイトを流し読みすれば理解できるでしょ

242 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:12:23 ]
選定の結果、見事>>236の社内標準に採択されたprogress_displayであった。

243 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:13:40 ]
shared_ptrはヘッダだけだし、boost展開した箇所にincludeパス張るだけなんだからってPM説得したほうが良さげ



244 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 17:16:50 ]
shared_ptr使ってて修正を重ねるうちに
気が付かないうちに循環関係になっててメモリリークを引き起こしちゃって原因の判明に苦労したのだが
もうこれは気をつける以外に対応がないものなのか?

245 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 17:55:19 ]
>>244
デバッグ終了時にリークはレポートされるから、レポートされたときの版のコミットログ調べればすぐに特定できると思う。
循環参照が起きるパターンは限られてるんで、その場で対応すればいいと思うよ。
予想外の循環参照が起きるのは設計が悪いとしか言いようがない。たとえば参照の方向を一定にし、前方参照とshared_from_thisを使わない設計にすれば循環参照は自然に避けられる。

246 名前:デフォルトの名無しさん [2010/05/30(日) 10:57:28 ]
stdio.hをインクルードしなくても
printf関数が使えるんですけどどういうことですか?
単なる警告なだけでエラーにならないのが不思議です。
本にはインクルードせよみたいに書いてあるのに
じゃあ何のためにインクルードするの?って感じなんですが・・・。

247 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:04:15 ]
Cの事なら、宣言されていない関数は
戻り値の型が int で、引数が (...) であるのと同じように解釈されて実行される。
だから、math.h をインクルードせずに sin(1) とかやると
変になる(int sin(int) であると解釈して実行されるので)など、
ちゃんとインクルードしないと意図しない動作を引き起こす恐れがあるので、
必ずインクルードすること。
(数学関数を特別視してちゃんとdoubleにしてくれるコンパイラもあるけど、
 それはそのコンパイラ独自の仕様)

C++なら文法エラー。

248 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:34:35 ]
googleのコーディング規約の整数型の項目についてなんだけど
これってコンテナのoperator[]の引数もintあるいはintN_tにしろってこと?
あとintは少なくとも32bitあると考えても良いって書いてあるけどそんな保証はないよね?

249 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:58:15 ]
グーグルの開発環境では最低32bitなだけだろ

250 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 12:22:04 ]
組み込みやらないなら最低32bitの過程が今時崩れることはないだろう

251 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 12:29:44 ]
社内規約をなんだと思ってるんだろうw

252 名前:デフォルトの名無しさん [2010/05/30(日) 16:10:26 ]
float に100.123と入力して表示させると
100.123001となってしまうのは何故ですか?

253 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 16:11:28 ]
100.123が2進数では循環小数になるから



254 名前:デフォルトの名無しさん [2010/05/31(月) 03:48:08 ]
VS2008のコンソールでスレッド使ったプログラムを作ってるんですが,
例外でデバッグが止まると時々,終了できなくなります.
デバッグ→すべて中止でも止まらない,タスクマネージャのプロセスにも表示されない...
プロセスIDを調べてPskillで指定しても終了できません.
コンソールwindowは残ったままなんですが….おかげでwindowsごとリセットしていますが,
何か止める方法orこうならないための対策ありますか.


255 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 08:07:33 ]
あ、俺も知りたい。
Windows自体再起動も終了も出来なくなるし、放置すると全体がフリーズしてすごく困る。

256 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 12:29:22 ]
>>254
>>255
CTFMONってプロセスがあったらキルしてからデバッグして味噌

257 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 14:14:42 ]
翻訳お願いします。英語版できいたら分からないといわれました。
The problem here is that our template was instantiated for the type char,
which turns out to be too by introducing an additional template parameter AccT
の英文は
「この問題はテンプレートは文字型についてインスタンス化されたことのことです。」
コンマまではこの訳であってますよね。その後は,
「witchはまた追加パラメーターACCTの導入によるもでであることがはんめいした」
であってますよね?
witchが指すものが前文に無いようにおもえて翻訳できません。
詳しく教えてください。


258 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 14:28:02 ]
whichはproblemにかかってるんじゃねーの?

259 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 14:34:52 ]
>>258
翻訳してください。

260 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:17:53 ]
>>258なら「この問題」

261 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:19:39 ]
>>256
ありがと。今度なったら試してみる。

262 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:22:35 ]
which turns out to be too がわからない。 この too は何だ?


263 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:23:18 ]
tooは 最後につけるところを真ん中につけただけ。



264 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:24:18 ]
>>263 じゃ、 be の補語は? exist の意味のbe?

265 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:25:10 ]
which turns out to be (instantiated) too かなあ。

266 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:26:36 ]
beの補語はby以下らしい。

267 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:30:55 ]
関係代名詞はbeの補語ではなくて主語になるらしい。

268 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:34:23 ]
この問題は追加テンプレートパラメーターAccTの導入からも、
存在することがが明らかになる

269 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:37:29 ]
まとめて訳すとこんな感じか?

ここでの問題は、追加テンプレートAccTの導入からもわかるように、
我々のテンプレートが文字型についてインスタンス化されてることです。

270 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:40:13 ]
ありがとうございました。

271 名前:デフォルトの名無しさん [2010/05/31(月) 17:22:57 ]
質問です。C++2008には
#pragma ○○
・・・
#pragma end○○

と書けば横の+、−でコードを格納できたと思いますが、
忘れてしまったので教えてもらえませんか?

272 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 17:58:12 ]
region

273 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 10:42:15 ]
staticってどういう時に使うの? なんでグローバル変数じゃなくて静的変数を使うの?



274 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 11:56:59 ]
グローバル変数との比較だと
static変数はスコープがソースコード単位になるから
他のソースコードと名前が重複しても大丈夫

275 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 12:06:55 ]
Cにはnamespaceがないから。

276 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 14:15:29 ]
staticって意味が幾つも有ったような

277 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:21:16 ]
C#言語で言う#regionみたいなことがしたいのですが
何かいい方法はありませんか?
現在は
#define COM 1

#ifdef COM
~折りたたみたい部分~
#endif


といった使い方をしていますがスマートではなく、何かいい方法がないか探しています

278 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:25:24 ]
釣りかギャグかはたまたガチか
それが問題だ

279 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:28:52 ]
初心者すれに行くべきでしたね
すいません移動します

280 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 20:00:34 ]
数レス前に書いてあるだろw

281 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 20:55:03 ]
あれだ
灯台下暗し

282 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:42:20 ]
かなり初歩的な質問なのですが継承で
基本クラスのメンバ関数から派生クラスのデータメンバを変更するには
どういった操作がありますでしょうか?
基本クラスのメンバ関数に派生クラスのオブジェクトのアドレスを
渡してみたりしたのですがコンパイルエラーで上手くいきませんでした。
よろしくお願いします。

283 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 02:40:09 ]
普通に仮想関数でいいと思うが。



284 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 07:44:39 ]
そんな基本クラスが派生クラスの中身を知っているような設計は投げ捨てるかどうしてもというならCRTPを使いなさい

285 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:11:03 ]
>>283 >>284
参考になりました。ありがとう!

286 名前:デフォルトの名無しさん [2010/06/02(水) 17:13:54 ]
1. 構造体のポインタ*tがある
2. 構造体の中にint型のポインタhogeがある
3. mallocを使って*tのメモリを確保
3. mallocを使ってhogeにint型x個分のメモリを確保
4. fwriteで構造体をファイルに書き込みたいが、二項目はどうやって指定すればいい?

287 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:18:28 ]
fwrite(t, sizeof *t, 1, fp);

構造体のサイズが増えるわけでもないし。

288 名前:デフォルトの名無しさん [2010/06/02(水) 17:27:25 ]
>>287
上手くいかん

typedef struct test_t {
 int a,b,c,d,e;
 int *p;
} test_t;

test_t *t;
t = (test_t *)malloc(sizeof(test_t));
t->p = (int *)malloc(sizeof(int)*60);
printf("%d",sizeof(*t));

で、24って出る

289 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:31:01 ]
>>286
fwrite(t, sizeof(int), x, fp);
だろ

ただし、
>1. 構造体のポインタ*tがある
でなく、
>1. 構造体のポインタtがある
であるならということ。3.も同様。

もし原文通りなら
fwrite(*t, sizeof(int), x, fp);
となる

290 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:32:28 ]
>>288
pに確保した領域のサイズは構造体とは別。

291 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:32:45 ]
trivially copyable classに展開してまとめて読み書きすればいいよ

292 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:34:55 ]
>>288
構造体には他のメンバもあるのか。
それなら fwrite を2回する必要があるだろ。

fwrite(t, sizeof(test_t), 1, fp);
fwrite(t->p, sizeof(int), x, fp);

293 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:42:39 ]
>>290
知ってる。だから質問した

>>292
それが一番スマートかな
構造体からpをそもそも切り離しとくってのも一つの手か
thx



294 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:47:00 ]
知ってたら>>288で24が出ても上手くいかんなんて言わないだろw

295 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:55:29 ]
fwriteしたものを、そのままfreadしようっていう魂胆なの?

296 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:59:17 ]
定数じゃないならxもどっかに保存しとかないと読み込むとき困る。

297 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:13:15 ]
読み込みは t = malloc(sizeof *t) → fread(t) → t-> = malloc(int*x) -> fread(t->p) で。

298 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:39:27 ]
型変換を伴うコピーの時の参照カウンタのコピーをどうやってるのかと疑問に思って
shared_ptrの中身を覗いてみたらpublicメンバだった

こんなものなの

299 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:49:20 ]
>>298
public でないと参照できないじゃん

300 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:54:47 ]
>>299
まあそうなんですが
boostのことだからもっと複雑怪奇な方法で回避してる物かと思ったのでw

301 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 19:25:24 ]
template friend classにしないのはなんで?

302 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:51:31 ]
codepad.org/1ZyOAlyL
上は、はじめてのCという本に乗っていたコードを
少し書き換えたもの(printfをcoutに、など)です
結果が3→2→1→0→1→2→3と表示される内、
行きの3→2→1→0は分かるのですが、
帰りの0→1→2→3の部分がどうしてそうなるのか、さっぱり分かりません
tline(int x)に渡す引数を増加させる処理はないように見えるのですが、
どなたか教えていただけないでしょうか

303 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:54:41 ]
再帰関数で0以外は一つの関数で2回表示してるから。



304 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:00:50 ]
recfunc(3)を呼び出す
3を表示する
 recfunc(2)を呼び出す
 2を表示する
  recfunc(1)を呼び出す
  1を表示する
   recfunc(0)を呼び出す
   0を表示する
   recfunc(0)から抜ける
  1を表示する
  recfunc(1)を抜ける
 2を表示する
 recfunc(2)を抜ける
3を表示する
recfunc(3)を抜ける

305 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:05:54 ]
>>303
冷静になってみると仰る通り2回表示してますね
ifの中身だけ見て、その下を見てませんでした
ありがとうございます

>>304
詳しい説明ありがとうございます
小一時間も考え込んでた自分が恥ずかしいです

低レベルな質問にも関わらずお答えいただき、お二方に感謝します
ありがとうございました

306 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:48:07 ]
>>301
どうもコンパイラにより対応状況がまちまちらしい
boostのコードをみてみたら狡賢いコードになってたw

public:
/*
〜省略〜
*/

#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
private:
template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;
#endif
T * px; // contained pointer
boost::detail::shared_count pn; // reference counter

307 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:51:08 ]
ポインタp,qがあって参照剥がしして一致、あるいは、両方NULLならtrueにしたいときって↓でおけ?

((p && q) && (*p == *q)) || (p || q)

308 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:57:48 ]
だめじゃね?

309 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:01:27 ]
だめだな

310 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:06:08 ]
どうして諦めるんだよ!

311 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:07:30 ]
((p&&q) && (*p==*q)) || (!(p || q))か?

312 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:20:33 ]
答え:(p && q && (*p == *q)) || !(p && q)

313 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:25:48 ]
X



314 名前:デフォルトの名無しさん [2010/06/02(水) 23:29:56 ]
!p && !q || p && q && (*p == *q)

315 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:58:39 ]
答え。
p-q

316 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 00:10:52 ]
>>314が俺好み

317 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 00:15:55 ]
!p && !q と !(p || q) のどっちにするかは趣味の問題だな。

318 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 06:52:18 ]
p == q || p && q && *p == *q

319 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:21:58 ]
p == q || と || p == q のどっちにするかは趣味の問題だな。

320 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:27:53 ]
p == q を先にチェックするほうがいいにきまってるだろ。

321 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:42:16 ]
なんで?

322 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:48:52 ]
p と q が 0 でない事を先にチェックした方が良い
0だと以降が実行されない

p == q は p と q の両方が0でも真になってしまう

323 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:50:42 ]
> p == q は p と q の両方が0でも真になってしまう
それが >307 が求めていたものでしょ。




324 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:55:05 ]
>>32 参照はがしをしなくてすむなら、しないほうがはやいでしょ?
ポインタが同じところをさしているなら、ポインタの先を見るまでもない。

325 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 10:46:05 ]
>>324
大人になれば分かる

326 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:09:17 ]
>>324
ポインターの値が同じでも実体の値が違うことがある

327 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:16:50 ]
順序は実際のデータでプロファイリングして決めるのが一番

328 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:19:07 ]
>>326
PODとは限らんからね
>>324 はC++でプログラム組んだことがないんだと思う

329 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:29:17 ]
>ポインターの値が同じでも実体の値が違うことがある
そんなスマポは使いたくない。


330 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:30:37 ]
>>328
普通のポインタじゃなくて、スマートポインタの話をしていたの?

331 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:31:47 ]
p,qが生ポインタでp == qで*p != *qって例えばどういうケースよ?現実的な事例を教えてくれ

332 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:32:55 ]
メモリマップトI/Oなんて、もちださないでくれよ。

333 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:33:10 ]
ポインターの値が同じでも実体の値が違う
ってどんな用途に使うスマートポインタなんでしょうか?
気になる



334 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:47:13 ]
>>331
PODでなければ普通に起こるだろ。

335 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:49:35 ]
>>331
それが保証されるのはCに限った話、C++は違うね

336 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:51:56 ]
保証されるとかじゃなくて、現実的な話として、そういう設計の有益なクラスを例示してくれって言ってるの

337 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:03:17 ]
>>336
例えばベースクラスが共通(またはどちらかがベースクラス)で、
片方への cast operator が定義されている場合とか

こういうコード普通に沢山存在してるだろ
有益かどうかはお前のさじ加減だし

338 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:19:45 ]
p==qの時点でp,qの型は同じ
参照はがしても同じ型で比較されるだけだからキャストは関係ないだろ

339 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:21:59 ]
>>337 あたまがわるいので、例が思いつかない。 具体例を教えてください。
class B { int x; };
class C { int y; };
class D : public B, C { int z; };

int main() {
D* p = new D();
B* q = p;
printf("p == q => %d\n", p == q);
printf("*p == *q => %d\n", *p == *q);
}

D に、どんな演算子を定義すればいいんですか?


340 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:28:41 ]
みなさんが当たり前のように言ってるC++なら違うっていうのは
!=のおかしなオーバーロードのことでいいんでしょうか?

なんだか!=が真になるのが普通にあることみたいにいわれてるようなので
ひょっとしてこれではないのでしょうか?


あと>>334はPODって言ってますが組み込み型の間違いであっていますか?
PODの構造体は比較演算子が使えないですよね?

341 名前:339 mailto:sage [2010/06/03(木) 12:29:06 ]
operator == を再定義するのは反則だよねえ?

#include <stdio.h>

class B { int x; };
class D : public B { int y; };
bool operator==(const D&, const B&) { return false; }

int main() {
D* p = new D();
B* q = p;
printf("p == q => %d\n", p == q);
printf("*p == *q => %d\n", *p == *q);
}


342 名前:339 mailto:sage [2010/06/03(木) 12:31:53 ]
>ポインターの値が同じでも実体の値が違うことがある
operator == を再定義したら、「実体の値が違う」ことにはならないか。

343 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:35:37 ]
>>319 == >>329
>>318 はどちらにしろ間違ってるんで、いち抜けする。
if p == q はダメだろう。



344 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:41:23 ]
>>343
>>318 のどこが間違っているって?


345 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:42:26 ]
if p == q はダメだろう。

346 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:43:41 ]
(1) p と q が別のオブジェクトを指していて
(2) p == q で
(3) *p と *q の実体が違う
ということはありえないで、ファイナルアンサー?


347 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:45:24 ]
p==qかつ*p!=*qなんて非常識なケースが普通に沢山あるようなコードを自信満々に書いちゃう>>337は別業種への転職をおすすめする
そうなるように書くことはできるが、副作用も含めてそうならないようにコードを書くのが当たり前の感覚

348 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:47:56 ]
>>307 に答えだしたら
p=123456;
q=123456;
if p == q はダメだろう。

349 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:49:49 ]
>>348 どこがダメ?

350 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:51:27 ]
>>348 無効なポインタを渡したときに、アクセス違反が発生しないからダメとかつまんないこといってんじゃないよね?

351 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:51:41 ]
>>349
自分で適当なアドレス突っ込んだ場合、
「参照剥がしして〜」
の条件に合わなくなる(参照はがせない)
って言ってるんだろ?
アホかと思うがwwwww

352 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:53:34 ]
普通にやってて自分でアドレス突っ込んじゃうような子がいたら消費者に訴えられるレベル

353 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:58:58 ]
>>338
これが違う
p と q が同じ型だとはどこにも書いてないだろ



354 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:01:28 ]
>>353
違う方じゃコンパイルエラーだろ

355 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:02:35 ]
>>339
operator B();

というメソッド。

356 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:03:16 ]
>>354
だからベースクラスが共通な場合って言ってるだろ

357 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:03:29 ]
アップキャストはされるんじゃね

358 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:06:31 ]
>>356
共通でなくどっちかがベースクラスの場合だね

359 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:07:11 ]
>>356
codepad.org/q3SbZGSj
同じでもエラーだよ

360 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:12:31 ]
p と q が別の実体を指しているのに、 p == q にするコードなんて書けないよ。

361 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:12:40 ]
pとqは違うクラスです、とか、もう無茶苦茶
何考えてんだか…

だったらC++と言わず
char *p;
long *q;
でもいいわけでね…

362 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:15:18 ]
>>361
>pとqは違うクラスです、とか、もう無茶苦茶
どっから同じクラスだって前提が出てきたんだ。
君の思い込みだろ?

363 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:15:30 ]
>>318 がダメって言ってる奴って、ひとりだけ?



364 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:17:35 ]
>>362 ばかばかしい。
次は、「釣りでした」とか「何あつくなってんの」とかかよ。

365 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:17:44 ]
ひとりだけ

366 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:22:16 ]
>>364
実務だと仕様書とか解釈が厳格になるからね
型が同じと書かれていないのに、勝手にそういう前提をおいたりしないんだよ

まぁ趣味の人にはわからない話かもしれないけどね

367 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:23:21 ]
2chまできてお仕事ご苦労様です^^;

368 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:26:52 ]
そうそう、ここは趣味の範囲だから実務の話されても困るわ。

369 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:45:09 ]
C /C++という前提において仮定が無ければ、一般の場合を適合するのが普通じゃないか?
>>366は特殊な場合のみいってるよね。

370 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:54:55 ]
>>307を見て、同じ型へのポインタじゃないと思えるほうが不思議

371 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:57:22 ]
それはただの思い込み。

372 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:58:57 ]
>>369 >>370
だから、趣味ならそれでいいんじゃない、大体動けばOK

でも仕事なら動かない場合とかあったら問題になる
だから最初から色んなケースを想定する
そういう習慣がついてんだよ

373 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:01:02 ]
>>372
繰り返すが、ここは趣味のスレ、お前は場違い、出て行け。



374 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:01:02 ]
仕事なら仕様を聞くだけで、余計な想像なんて入り込む余地はないだろw

375 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:04:46 ]
>>374
ん?
最初の質問で p と q が同じ型だと書いてなかったら、
俺は同じ型でない場合も想定してただけだよ。

仕事でこういう場合に、勝手に同じ型だけしかありえんだろうって考えで
コードを書いたらとんでもないバクを生むことになるから。

376 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:07:11 ]
屁理屈はお上手ですね。

377 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:09:52 ]
どう見てもただの後付けw

378 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:10:11 ]
いくら正論言おうと空気読めない奴が何をいっても無駄。

379 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:10:42 ]
実務でもありえないような数値入力して、
プログラムが暴走して損害だしても、それは入力したユーザのせいになるよ。

プログラマがそんな細かいことまで考える義務はない。
プログラマの前提が優先されるからね。

380 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:12:47 ]
>>375
お前以外の99人はpとqは同じ方という前提なんだよ
その時点でお前がまちがってるということ

381 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:14:25 ]
民主主義の国は何もかも多数決で決められる、
それがいやなら北朝鮮でもジンバブエでも好きなところいけ。

382 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:16:17 ]
p=qなら常に*p=*qは成り立つ、これが常識
そうならないケースを考える馬鹿が一人いるってこと
そして沢山の人から非難をあびている

383 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:20:45 ]
p=q;
をみて

/*
p=q;
*/
まで仮定しないといけなくなるな。



384 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:23:50 ]
仮定を排除してまずコンパイラが仕様通りでバグが無いか確かめます

385 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:26:57 ]
パソコンにコンセントが刺さっているか調べます。

386 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:27:49 ]
自分が仮想現実の住民でないか確かめます

387 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:32:58 ]
例外的な可能性を考慮してダメだししたって言うには、
指摘の時点でそれを言ってないとダメ。

388 名前:デフォルトの名無しさん [2010/06/03(木) 14:37:51 ]
教えてください。
クラス foo と bar を用意したとします。
bar は foo 1つにつき1インスタンス必要なので、foo のコンストラクタで bar のインスタンスを作ってます。
ただ、bar は foo の情報を元に処理するので、bar のインスタンスを作る際の引数に、this (foo) を渡そうと思いました。
要するに、相互参照です。
foo.h と bar.h とした場合、include 順の指定がうまく行かずこまっています。

これは、この設計が誤っていますか?
ヘッダファイルや宣言の記述に細工が必要ですか?
正しい考え方や、記述の仕方を教えてください。


389 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:38:09 ]
馬鹿なレスが多いんで見落としてた

>>347
俺も基本的にそういう考えだよ。別に俺がそう書きたいというわけでなく、
p==qかつ*p!=*q は存在しないということに対して、存在する場合もあると言っただけだよ。

そもそも cast operator を定義する時点で怪しいコードになってくる。
けどその有用性を利用しているコードも存在している。
だから、その性質を理解しておくのは必要なことだと思っている。

例えば行列を表すクラス A があって、
それを拡張してインバース属性を持つクラス B 作るとする。
このときに B には opertore A() を用意しておき、
インバース属性が立っていれば逆行列を返すようにするとか
そうすると A を使用していたコードがそのまま使える。

こういう手法を使うことはよくあるだろ。(少なくとも使ってる奴がいるだろう。)

390 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:41:49 ]
ウザイ

391 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:43:12 ]
ここまで来ると哀れだなw

392 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:43:51 ]
>>388
'foo.h' で

class bar;
class foo {
.....
};

のように、空のクラス宣言をしてやれば回避できる場合もある。
これでいけるかどうかは相互参照の内容次第。

393 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:44:31 ]
>>389
死ねばいいのに



394 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 14:51:43 ]
>>388
インナークラスとして、一つのヘッダーにまとめてしまうとか

class foo {
class bar {
・・・・
};
・・・・
};

395 名前:388 [2010/06/03(木) 14:54:43 ]
なるほど、空クラスですね。
やってみたのですが、やっぱり仰るとおり相互参照次第で、コンストラクタに this を渡したい場合はそれ相応の宣言が必要でした。
この考え方(構成)が間違っているという事ですかね。。

396 名前:388 mailto:sage [2010/06/03(木) 14:56:04 ]
>>394
なるほど!!!
為してみます。
インナークラスかぁ。勉強になります。

397 名前:デフォルトの名無しさん [2010/06/03(木) 19:50:52 ]
質問です。

例文

int a;

printf("値をいれてください:");
scanf("%d",&a);

if(a<0&&a<9)
{
printf("値が違います!!");
}


とこういう文があったとして、aにたとえば10を入力するとエラーメッセージを出してもう一度
入力させる処理に戻りたいんですがなにを付け加えればいいですか?


398 名前:デフォルトの名無しさん [2010/06/03(木) 19:55:37 ]
do while

399 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:01:53 ]
while(1) {
printf("値をいれてください:");
scanf("%d",&a);
if(0<=a && a<=9) break;
printf("値が違います!!");
}

400 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:03:24 ]
int a;

INPUT:
printf("値をいれてください:");
scanf("%d",&a);

if(a<0&&a<9)
{
printf("値が違います!!");

goto INPUT;
}

401 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:22:20 ]
int a;

do {
printf("値をいれてください:");
scanf("%d",&a);

if (a < 0 && a < 9) {
printf("値が違います!!");
} else {

402 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:23:25 ]
途中送信しちゃった
ごめんね

break;
}
while (true);

403 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:56:54 ]
>>398-402

たくさん回答ありがとうございます。gotoが一番簡単そうですね、勉強になりました。



404 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 21:56:15 ]
>>403
こうする手もある

int a;
while (!Input(&a)) { }

int Input(int* p) {
 printf("値をいれてください:");
 scanf("%d", p);

 if(*p<0&&9<*p) {
  printf("値が違います!!");
  return 0;
 }
 return 1;
}

405 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 22:07:46 ]
gotoは推奨されていない

406 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 22:13:42 ]
それは思考放棄
gotoを使ったほうがやりたい事を的確に表現している場合はgotoを使うほうが良い

407 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 22:39:28 ]
まぁgoto使った方が便利な時もあるけど
あんまり>>397の質問のレベル的にgotoを
使う癖は付けない方が良いと思う。

408 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 00:47:02 ]
Cで無限大を表記するにはどうすればいい?

409 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 00:56:58 ]
+inf
-inf

410 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 00:57:59 ]
って処理系依存だっけ?

411 名前:408 mailto:sage [2010/06/04(金) 01:10:36 ]
ごめんなさい説明不足がありました

今xy軸上に三角形を作るプログラムをやっていて3点を直線で結び出来上がる三角形があるとして
ある線が傾き無限の直線になったとき三角形が描けなくなります。※2点のx座標が等しい場合

それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました

412 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 02:00:07 ]
傾きを計算する前に判断しようぜ

413 名前:デフォルトの名無しさん [2010/06/04(金) 02:51:47 ]
今xy平面に三角形を作るプログラム作成に取り組んでいて3点を線分で結び出来上がる三角形があるとして
ある線分の傾きが無限になったとき三角形が描けなくなります。※2点のx座標が等しい場合

それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました



414 名前:デフォルトの名無しさん [2010/06/04(金) 02:53:44 ]
3点A(1, 0) B(1, 1) C(0, 1) で、AとBのx座標が等しいが、三角形ABCは書ける。

三角形がかけないのは、3点が同一直線上にある場合。

415 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 05:51:03 ]
>※2点のx座標が等しい場合
なぜこれで判定しない?

416 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:20:49 ]
参照を後からセットすることはできませんか?

Class B;
Class A {
B& m_b;
};

のような状態で m_b をコンストラクトより後のタイミングでセットしたいのです。
ポインタにすればできますが * を付ける必要があるので、参照でやりたいんです。

417 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:42:50 ]
無理。
生ポインタ弄るのが嫌な場合はboost::reference_wrapper的なのを使えばいいが、
operator* 等を使うのが嫌という要求は言語仕様の埒外。

418 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:06:35 ]
無理やりやったりして
codepad.org/7goDNgTH
保証されてないよね

419 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:21:40 ]
>>417
>operator* 等を使うのが嫌という要求は言語仕様の埒外。
参照ってそういう機能だろ、問題はセットできるのが初期化時に限られてるということ

420 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 13:13:31 ]
問題というより安全性の確保だろ。
いつのまにかぬるぽになってたりしないように。

421 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 15:13:51 ]
>>418
LLP64だと悲惨な事になりそうだな

422 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 09:42:28 ]
ポインタも参照もほとんどの実装では中身は同じだろうから
LLP64とかは関係ないと思われる
もちろん規格は保証してくれないが

ダミー変数の必要のない方法
ttp://codepad.org/h1sj56ka
もちろん実際に使っちゃだめだよ

423 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:47:02 ]
get()メソッドで妥協していいならboost::optional<T &>だな

int x, y;

boost::optional<int &> opt(x);

opt.get() = 1; // x = 1

opt = y; // yに張替え

*opt = 2; // y = 2



424 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:48:23 ]
*でも面倒くさいと言ってんのに.get()はないわ

425 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:58:50 ]
じゃあどうしようも無いな
operator . がオーバーロードできない時点で参照剥がしの手間はかならず必要になる
代入と暗黙変換はその限りではないが

426 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:05:40 ]
unionに参照は入れられないか・・・

427 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:26:35 ]
LZ77で圧縮したデータを解凍するソースを書いて欲しいと言われたんだが
圧縮情報を表す箇所って、規定無いよね?
abcdeabcdezをLZ77に掛けると、abcde[5,5]zとなるけど
[5,5]を判断する場合どうすれば良いの?
圧縮側もこちらで書いていいなら\\[5,5]とか目印入れれば分かるけど
解凍ソースのみで困ってる

428 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:40:52 ]
解凍ソースあるならいればいいじゃん

429 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:51:35 ]
>>428
ソースは一切なし。圧縮したデータを見ることもまだ出来ない
それでいて、最初のLZ77を使ってるからと言われ
きちんと解凍出来るソースを書かなきゃいけないみたい
調べると、何処のサンプルも圧縮情報の前に適当なマーク入れたり
9bitにして、その後ろが圧縮情報か見たりしてるから、一発で動くのが書ける気がしない

430 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 12:00:37 ]
LZ77の仕様書よめばどう扱ってるか解るんじゃね?

431 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 13:48:25 ]
亜種が大量にあるとかいう話だけど

432 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 22:41:12 ]
int[10]が書き込まれてるファイルをfread(hoge,sizeof(int),100,fp)とかやったら足りない部分はどうなるの?
ちゃんと0で埋まる?それとも保障されてない?

433 名前:デフォルトの名無しさん [2010/06/05(土) 22:43:52 ]
>>432
埋まらない。何もされない。



434 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 23:17:42 ]
thx

435 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 02:36:53 ]
C++の具体的に難しいところってどの辺なんでしょうか?Cだとポインタと配列辺りだと思うんですが。
ちなみに今継承あたりを勉強中です。

436 名前:デフォルトの名無しさん [2010/06/06(日) 02:40:11 ]
TMP

437 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 09:58:14 ]
経験的には、ポインタとか配列は難しくなくて、初心者でもすぐに使い始める。
難しいのは適切に使うこと。初心者はなんでもポインタで解決しようとしがち

C++とかもだいたい同じで言語仕様が難しいというより、どう使うのかが難しい。
いっぱい用語があるのも難しいところかも。pimplとか

438 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:03:11 ]
pimpl使ったら分からんと怒られた

439 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:08:35 ]
ポインタは概念が難しいのではなく書式が難しいと言う人が多いけど
どう考えても書式が難しいのではなく概念が難しいから初心者はつまずくだろ

440 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:17:43 ]
ポインタのポインタの配列とか
関数ポインタの配列とか

概念は簡単でも書き方に戸惑う

441 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:21:32 ]
そんなふうに書かなくても済ませられるのがC++のいいところじゃないか

442 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:32:38 ]
>>439
概念が簡単だとは言わないが、わけのわからん書式が、せっかく理解しかけた
初心者の脳を改めて引っ掻き回して台無しにするのも事実。

443 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:38:06 ]
>>442
int *a;
*aはint変数のように扱える。論理的かもしれないけど直感的ではないな。
イテレータも、二つのイテレータを使えば0個も表現できるってのも論理的だけど直感的ではなくわかりにくいね。



444 名前:デフォルトの名無しさん [2010/06/06(日) 11:41:00 ]
ポインタは全く難しくないよ。

だってお前らですら全員理解してるじゃんwww

445 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:47:36 ]
つうか概念は簡単だろ

446 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:50:16 ]
Cでポインタより難しい概念あるの?

447 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:51:35 ]
int *p じゃなくて *int p ならまだ分かりやすかったんじゃないかとか思ったり

448 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:59:43 ]
int* a

449 名前:デフォルトの名無しさん [2010/06/06(日) 12:13:04 ]
>>447
int *a;
int pa;
int asteriska;
int XXX;

これらの表記では、*a も pa も asteriska も XXX もすべて int型として扱える。
int の後ろに書いたものが、int型になる。
つまり、aの参照剥がしは*aと直感的に分かる。

*int p;

この表記では、pがint型へのポインタということが分かるのかもしれないが、
pをどう参照剥がしすればint型になるのかこの書式からは分からない。

以上の点で、前者の表記のほうが分かりやすいと考えられる。

450 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:19:44 ]
>>449
ならば、int *a;で変数の領域が確保されなきゃおかしいじゃん。

451 名前:デフォルトの名無しさん [2010/06/06(日) 12:20:51 ]
ああ、そうだね。

452 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:24:03 ]
じゃあ int &a; は &a が int なんだね

453 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:38:21 ]
int *a = XXX の右側に来るのがポインタ値って時点で全く直感的じゃない



454 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:07:06 ]
>>280
遅れましたがありがとうございました

455 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:08:47 ]
int *a; のメリットは int *a, *b; とするのを確実に忘れないという一点のみなのに
*a が int だとよく分かる(キリッ とか言うから面倒なことになる

456 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:25 ]
なるほど

457 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:52 ]
int* const a = XXX;
とやりたい時はどうするの?

458 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:14:58 ]
それでいいんじゃないの

459 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:15:50 ]
int *const a = XXX, *const b = YYY;

460 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:20:47 ]
直感に頼るからいけない
俺は左から型に演算していくと理解してる


int const * const & a;

(((((int) const) *) const) &) a;

intをconstにして、そのポインタ型をとって、それをconstにして、その参照型をとって、それにaという名前をつける

add_ref<add_const<add_ptr<add_const<int>::type>::type>::type>::type a;

461 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:44:31 ]
>>460
こんなに深い宣言なんだぞ。キリッ

462 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:49:35 ]
そこへ配列宣言が颯爽と登場。

463 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:14:17 ]
メンバ関数ポインタへの配列があらわれた!



464 名前:デフォルトの名無しさん [2010/06/06(日) 14:19:24 ]
>>452-463
つまり、C/C++の構文はダメダメってことだね。

465 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:22:54 ]
別に

466 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:37:03 ]
identityとtypedefがあればすべて解決

467 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:37:11 ]
構文と言うか文法と言うか、とにかくそっち方面で残念な言語だとは思う

468 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:20:00 ]
すみません。
現在1クラス1ヘッダ&1ソース という形で30対のヘッダーとクラスがずらっと並んでいます。
他の方のプロジェクトを見るとヘッダの数だけがやたら多かったり、
逆にヘッダは1個しかなかったりする様なのですが、

1クラス1ヘッダ&1ソース というのは無駄で変なのでしょうか?
新クラスを作るたびに宣言程度のヘッダーを増やすのはやめて、
クラスの宣言程度のヘッダーはギッシリ纏めてしまったりした方が良いのでしょうか。

469 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:28:41 ]
boostなんてファイルのモンスターハウスだぜ

470 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:30:04 ]
↑ ×30対のヘッダーとクラスがずらっと
  ○30対のヘッダーとソースがずらっと(訂正すみません)

471 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:37:11 ]
>>468
原則分けたほうがいいよ

472 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 21:57:34 ]
1クラス1ヘッダ&1ソースでいいだろ

473 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 00:48:47 ]
Javaじゃないんだから、1クラス1ソースに拘ることはないだろ。
まぁ、関連のないクラスを纏めるのは論外だが。
インクルードファイルに関しては、ソースの数だけあっても全くおかしくはないと思う。



474 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 12:19:37 ]
>>468
業務開発なら珍しくない
メンテ時には、ひとつのファイルに詰め込むより
こっちのが良いことが多い

475 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:25:51 ]
C++のdelete[]の挙動について質問です。

int* p = new int[5];
int* q = new int[10];

int* z=p;p=q;q=z; //ポインタの交換

delete[] p; //どこまで開放されるのか?
delete[] q; //どこまで開放されるのか?

これ、メモリリークが起きたり、
逆に、開放しちゃいけない場所まで
開放されたりしないでしょうか?

476 名前:468 mailto:sage [2010/06/09(水) 13:31:07 ]
>>469 >>472-474
間違ってはなかったのですね。ありがとうございます。疑問が解決しました。

477 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:50:54 ]
p[-1], q[-1] あたりにサイズが入ってるから大丈夫

478 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 14:54:43 ]
>>475
それはない

配列newは自分で確保したサイズを覚えているので
アドレスさえ渡せば配列deleteは間違えない

479 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:08:14 ]
>>477-478
安心しました。
ありがとうございました。

480 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:12:40 ]
p[-6], q[-6] にサイズ入ってた
codepad.org/8mjF6LOr

481 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:20:39 ]
なんでだろうね20byteも間に挟むなんて勿体無い

482 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:32:30 ]
フリーリストとかブロックサイズとかハウスキーピングに必要な情報はいっぱいあるだろうさ。

483 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:56:52 ]
>476
入れてもらえなかった471涙目www



484 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 19:11:24 ]
サイズの情報があるのにプログラマからは使えないというのは理不尽な気がする

485 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:53:46 ]
プログラマがnewにサイズ渡してんだから要らんでしょという考え

486 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 21:26:43 ]
数バイト確保するより数キロバイトとか多めにとる方が一回の処理時間は大きいの?

487 名前:デフォルトの名無しさん [2010/06/09(水) 21:28:48 ]
大きくないよ

488 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 01:48:00 ]
>> ずっと前の人
ctfmonをkillっても駄目ダタ
やっぱりコンソールが閉じない&killできない。
激オソ報告スマソ

489 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 08:59:00 ]
デフォコンのみ、constメソッドのみ
つまり状態が1つで変化しないクラスのオブジェクトを何個も作るのは勿体無いと思うんだけど
これを共有する自然なコードってどう書く?シングルトンかな?

490 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:02:33 ]
>>480
環境依存の事を書いても仕方がない
BCCだとp[-4], q[-4]にサイズが入ってるぞ

491 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:10:14 ]
別に>>480は単なる例であって、どんな環境でもそうだとは言ってないだろ

492 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:12:47 ]
環境依存のスレは別にあるんだからこのスレで書くな

493 名前:デフォルトの名無しさん [2010/06/10(木) 09:21:50 ]
return 0;は0に返すという意味って大雑把な意味はわかるんですが、
例えば関数 keisan()があったとして
return keisan();ってのは同じようにkeisan()に返すって意味ですか?
returunの概念がいまいちよくわからんのですが・・



494 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:23:54 ]
returnは返す。
keisan()はkeisan関数を呼び出して、その値。
つまり、return keisan()はkeisan関数を呼び出して、その値を返す。
以上

495 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:24:33 ]
あー、そもそもreturn 0は0「を」(呼び出し元に)返すだからね。

496 名前:デフォルトの名無しさん [2010/06/10(木) 09:30:21 ]
>>494
なるほど、わかりやすい
別にreturn使わなくても
int main(void)
{
keisan();
}
だけで呼び出せるけどどういうことでしょう?


497 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:31:36 ]
意味が違うし、色々と説明したいのは山々だが時間がないので後続に期待w

498 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:34:26 ]
Pascal ならfunctionとprocedureってしっかり分かれているから
理解しやすいのだが、C言語はごちゃ混ぜに出来るし、戻り値を
捨ててしまえるというエレガント(?)な設計になっているため初心者が
ここで混同しやすい

499 名前:デフォルトの名無しさん [2010/06/10(木) 09:39:12 ]
>>497
そこをなんとか・・

500 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:43:26 ]
>>499
たとえばkeisan()の戻り値型がdoubleだとすると

double a;
...
a = keisan();
return a;



return keisan();

は同じような意味になる
要するにこの関数は値を返すか返さないかの違いだけ

501 名前:デフォルトの名無しさん [2010/06/10(木) 09:50:42 ]
>>500
関数ってのは返すのが当たり前じゃないんですか?


502 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:53:57 ]
>>501
そんな事はない

void kansuu(void);

のように戻り値の所にvoidと書いた関数は値を返さない
返そうとするとコンパイルエラーになる

503 名前:デフォルトの名無しさん [2010/06/10(木) 09:55:47 ]
プログラムの中でreturn使ってないのはいいの?
正しいプログラムなの?



504 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:01:36 ]
>>503
戻り型があるのにreturnを使わないと大抵のコンパイラでは警告が出る
正しいとは言えないが、戻り値を使わないプログラムだとそのまま動いて
しまう事がある

505 名前:480 mailto:sage [2010/06/10(木) 10:11:11 ]
>>490
うちのbccだとp[-1],q[-1]だったけど

>>492
らじゃ

506 名前:デフォルトの名無しさん [2010/06/10(木) 10:27:22 ]
>>504
#include<stdio.h>
int main(void){
int a;
scanf("%d",&a);
printf("%d\n",a);
}
エラーでないけどなwreturn使ったほうがいいのかこんな簡単なもんでも。

507 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:35:04 ]
>>506
誰もエラーが出るとは書いてないだろアホ

「警告が出るコンパイラが多い」と書いたんだよ日本語わかる?

508 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:43:52 ]
mainはエラーでないが他だとVCではエラー出る
voidなら不問

509 名前:デフォルトの名無しさん [2010/06/10(木) 10:45:37 ]
>>506はreturn使う必要どこにあるの?ないと思うが。
複雑なプログラムだけだろ。

510 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:41:18 ]
>>506 だまって0を返しとけ。

511 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:50:52 ]
取り敢えずvoid main()と書く奴はCを使う資格ないな

WindowsのGUIならvoid main()でもいいが

512 名前:デフォルトの名無しさん mailto:void main() (笑) [2010/06/10(木) 12:33:58 ]
>>511
その根拠は?

513 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:51:49 ]
またかよおめーら



514 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:53:12 ]
>>512
根拠は俺様だ
LinuxなどのUNIX環境でvoid main()などあり得ない
シェルが実行ファイルの戻り値をほとんど使う

515 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:54:30 ]
それだけじゃなくてWindowsでもコマンドプロンプトからバッチファイルで
使う場合は戻り値を使う

その時にvoid main()じゃ戻り値が不定値になってしまうだろうが

516 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:12:47 ]
1がエラーとか0が成功とかの規定なんて無いだろ。
0が成功かもしれないし1がエラーかも知れないし、
それ以外の情報を戻り値が教えてくれるかもしれない。
だから何も返さない方が一般性が高いと思う。

517 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:18:43 ]
はいはい
勝手に言ってろ

518 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:21:41 ]
>>516
www.opengroup.org/onlinepubs/000095399/functions/exit.html
ちゃんと規定されてる

519 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:29:29 ]
>>516
Cのstdlib.hににEXIT_SUCCESSとEXIT_FAILUREというマクロが
定義されているのは何のためだと思う?

無知にも程がある

520 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:35:46 ]
マクロというのはC言語の中でしか通用しないから
OSからみたら1か0にしか見えないの。
もし、プログラムが成功や失敗ではなくて
計算の結果を返して、その答えが1か0だった場合どうするの?
だから規定なんて無い。

521 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:37:53 ]
>>520
>>518が読めないのか?もしかして英語音痴か

522 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:38:56 ]
だいたいC言語のマクロというのはUNIXの総合環境の中で培われて
きたものだ

だからC言語の中でしか通用しないという言い訳はおかしい

523 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:56:41 ]
OSから見たらそのプログラムがCで作られたかJavaで作られたか
GCCでつくれたかどうかも分からない。
だから規定なんて無い。



524 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:08:06 ]
>>523
お前も頑固なやっちゃなー
そんな固い頭でプログラマで食って行けてるの?

525 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:10:09 ]
下っ端プログラマーでは食っていけないけど
SEとしては食っていけるよ。

526 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:10:50 ]
嘘付け
ニートの癖に良く言うよ

527 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:11:23 ]
C ->ネイティブ吐く
Java ->仮想マシン上
GCC ->そもそも言語じゃない
これらを一緒くたにして語ってる時点でもうね……

528 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:12:03 ]
と言うより、そんなに意地っ張りだからニートから抜け出せないんだと言っておくか
世の中を渡って行くには柔軟な頭脳は欠かせない

>>523のようなカチコチ馬鹿は家の中に引き籠もっているしかない

529 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:15:10 ]
結局何を書いても引きこもりにされるわ(ry

530 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:17:56 ]
いや実際>>523は引き籠もりだろ
言ってる事がSEにしてはおかしいもん

531 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 16:50:34 ]
MS-DOSでは0が正常終了

532 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:27:14 ]
>>519
exit()のためじゃないの?
main関数で使う物ってどこで定められてんの?

533 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:38:14 ]
みんな、そんなにマルチプラットフォームなプログラムを書いてるの?



534 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:15:10 ]
質問。MFCではなくWinSDK使って書く場合
case WM_CREATE:
g_Cls.init( );
break;
case WM_PAINT:
g_Cls.paint( );
break;
と書くのは、オブジェクト指向では無いよね?
でも、プロシージャ等の一式をクラスに纏めるのも微妙だけど、どういう書き方綺麗かな?

535 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:15:57 ]
exitのエラーは-1じゃね?

536 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:58:53 ]
>>535
俺の知る限りの環境では0以外全部エラーだお

537 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 22:53:11 ]
>>492
ん?
>>480は単なる一例であって、特に環境依存の話ではないが?

538 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:07:19 ]
次のようなコードで::max<int>()でも::max<d>()でも実体化出来るようにしたいのですがどう直せばいいでしょうか。

#include <algorithm>
template<typename T> class c{ /* 省略 */ };
template<typename T> c<T> max(const c<T>& a, const c<T>& b) { return std::max(a, b); }
class d { /* 省略 */ };
namespace std {
  d max(const d&, const d&) { /* 省略 */ }
}

::max<int>()は一例で、要するに何でも受け付けるようにしたいという意味です。

ここで実現したい制限がいくつかあります:
1. 値が変化するためstd::max(const d&, const d&)の戻り値はconst d&に出来ない。つまりalgorithmのstd::max()を特殊化出来ない。
2. std::max(const d&, const d&)が宣言されない場合があるため、::max<T>()はstd::max(const d&, const d&)の存在を知らなくてもいいようにしたい。
 当然その時はコード中に::max<d>()を実体化するようなコードは無い。

またそもそも論として、
1. ::max<int>()でも::max<d>()でも実体化できるようにする際に::max<T>()の中で呼び出すべきなのはstd::max()なのか。
2. d max(const d&, const d&)の宣言場所はstdの中でいいのか。
といった疑問があります。

539 名前:538 mailto:sage [2010/06/10(木) 23:23:02 ]
実際に試せるコードの方がいいですね。

#include <algorithm>
template<typename T> struct c { T v; };
template<typename T> c<T> max(const c<T>& a, const c<T>& b) { c<T> r = {std::max(a.v, b.v)}; return r; }
struct d { int v; };
namespace std {
  d max(const d& a, const d& b) { d r = {a.v+b.v}; return r; }
}

int main(int a, char** v)
{
  c<int> ci;
  c<d> cd;
  max(ci, ci);
  max(cd, cd);
}

::max<T>()をstd::max(const d&, const d&)より後に宣言すればコンパイルできるのですが、
出来ればstd::max(const d&, const d&)はどこに現れても(現れなくても)コンパイルできるようにしたいです。

540 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:26:11 ]
stdに変なもん入れんなよ

541 名前:538 mailto:sage [2010/06/10(木) 23:29:02 ]
>>540
やっぱり入れないほうがいいですよね。
stdに入れないで::max<int>()と::max<d>()を両立するにはどうしたらいいでしょうか。

542 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:42:05 ]
>値が変化するためstd::max(const d&, const d&)の戻り値はconst d&に出来ない
とはなんのことを言ってるのか、さっぱりわからない

543 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 00:48:53 ]
>>538
ttp://codepad.org/8Dcr8Nbk

テンプレートの特殊化ではいかんのか?
SFINAEやりたいが部分特殊化できないという話なら boost::enable_if 使え。




544 名前:538 mailto:sage [2010/06/11(金) 00:56:43 ]
>>542
示したのは意味のない例ですが、例ではmaxの中でa+bってやってますよね。
だからconst d&を返すことが出来ないんです。

>>543
ありがとうございます!
時を同じく丁度自前template maxの定義を思いついたところでした。
std::maxを特殊化しようとしないで自分で新たにtemplate maxを作って、それを特殊化しちゃえば良かったんですよね。

545 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:34:58 ]
初歩的な質問で恐縮なんですが継承を行うと
基本クラスのデータメンバは派生クラスにも同じように
データメンバが作られるのでしょうか?
また基本クラスのデータメンバをprotectedにして
publicで継承したとき,派生クラスは基本クラスのデータメンバに
アクセス,変更が出来るという認識でよろしいでしょうか?


546 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:36:08 ]
C++&DirectX(dxlib)でゲーム作ってるんだけど、ムービーシーンにFlashムービーで作った物を使いたい(楽なので)
何か方法ある?

547 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:44:05 ]
>>546
ieコンポ使えばいいよ

548 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:46:31 ]
>>546
ついでにゲームの核もFlashで作っちゃえばいいのにw

549 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:53:02 ]
>>547
ググったけどよく分からなかった というかなんか周りくどくない?
>>548
AS3でも遅すぎて話にならん

550 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:03:09 ]
Flashからaviに変換すりゃいいんでね?

551 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:05:44 ]
>>550
画質荒くなるしサイズ大きくなるし、いいこと無し

552 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:10:01 ]
>>549
じゃあムービーのときだけIE立ち上げればいいよ

553 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:27:42 ]
            ノ´⌒ヽ,,
         γ⌒´      ヽ,
        // ""⌒⌒"\  )       _/\/\/\/\/|_
        i /   ⌒  ⌒ ヽ )        \            /
        !゙   (・ )` ´( ・) i/         < 泣かせるおつむ >
        | /// (__人_)//|         /            \
         \__ `ー'_/          ̄|/\/\/\/\| ̄
       / ,}   ̄  ̄  { ヽ,
      /   i       i   \
    /  /^i|       |i^ヽ   \
 ヾ ̄ i /  .l           l  \._ノ`フ
   ̄ ̄    ト    ,,   ,.l      ̄
         | \    / |
         l    ヽ_r   l
           |    |   |
          l ,,_   l  _,,. l
            }    !    {
          / 二二 | 二二ヽ

   i⌒i .i⌒i               i⌒i               ____   __
   | .|.| .|               | .| ,ー、◎          (____ ) (__)   rヽ
   ノ ノ | .|  ,  r───ヽ   | .二ノ     r───ヽ       / /      | |
  ノ ノ  | .レ'ノ .ヽ───┘ | .|__ノヽ ヽ───┘  (⌒ /       .ノ |
∠/   |____ノ           ゝ___ノ             ヽ ヽ   ( ̄ ̄  ノ



554 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:35:48 ]
>>545の質問お願いします。。

555 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:38:56 ]
>>554
ttp://www7b.biglobe.ne.jp/robe/cpphtml/html02/menu02.html

556 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 05:02:05 ]
>>555
サイトの紹介ありがとうございます。
データメンバも継承されることは分かったのですがprotectedがまだ今ひとつ分かりません。protectedは派生クラスから基本クラスの値を変更する為に利用するのでしょうか?それとも基本クラスから継承したデータメンバを変更する為に利用されるのでしょうか?
よろしくお願いします、

557 名前:デフォルトの名無しさん [2010/06/11(金) 07:11:35 ]
ポインタの意味がサイトとか見てもよくわかりません。
例えば
(*p)はどういうことなんですか?(*f)もあるんですが


558 名前:デフォルトの名無しさん [2010/06/11(金) 09:19:45 ]
C言語習得に一番初心者に優しいわかりやすいサイト教えてください。
猫でもわかる〜でも難しいです。

559 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:26:34 ]
猫の先生はいしゃ
www.orchid.co.jp/computer/cschool/clec2.html


560 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:37:01 ]
>>556
protectedは実際はあまり使われない

ロベールのC++でも買って読むと良い

基本クラスでprivateで、そのまま継承して継承したクラスからも
見えるようにしたい時に使う事か多いけど実際はそんなに登場
する機会はない

561 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:52:55 ]
>>552
阿呆なのか?

562 名前:デフォルトの名無しさん [2010/06/11(金) 11:42:49 ]
(*p)と(*f)の違いについて

563 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:57:27 ]
そのサイトでは、変数 p と q は上のほうで何て定義してある?

猫の先生は内科の医者
www.orchid.co.jp/computer/cschool/clec13.html



564 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:34:43 ]
>>560
ありがとうございました!
非常に参考になりました。

565 名前:デフォルトの名無しさん [2010/06/11(金) 20:40:05 ]
自作のテキストエディタに予想変換機能(簡単な物)を付けたいのですが
その手の解説かソースプログラムある場所ありますか?
出来ればVC++のウィンドウズ非コンソールプログラムで

566 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:25:15 ]
>>565
現状何が問題なのよ。
予測文字列を算出することなのか、予測文字列群をポップアップで表示する方法なのか、いろいろあるでしょ。

567 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 23:29:28 ]
>>566
出来れば予測文字郡をリストボックス形式で表示して
入力と共にリストが絞り込める形がいいです

568 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 23:37:24 ]
share_ptrって凄く便利だけど遅かったりするの?

569 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 00:10:26 ]
>>567
それで今どこまで出来てるの

570 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 07:52:52 ]
>>568
メリットに対してコストは全然問題ないレベル。
普通に使って問題ないよ。万が一問題になったらそこで対応すればいい。

571 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:06:14 ]
>>570
ありがとん!

あともう一つ質問なんだけど、
listのremove()で、とあるメンバ変数が1だったら削除、とかやりたいんだけどどうやって指定したらよいの?
いろんなサイト見てるけどlist<int>とか<char>ばかりで<class*>がない…

572 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:09:54 ]
>>571
remove_ifを使う。

573 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:14:27 ]
>>571
std::remove_if



574 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:27:20 ]
>>572-573
センキュー!

575 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:42:09 ]
ごめん、やっぱ分からん
メンバ変数の指定ってどうやるの?

576 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:49:25 ]
>>575
std::mem_fun_refを使って渡す
メンバ関数のアドレスを直接渡そうとするのはダメよ

577 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:50:14 ]
ごめんなさい間違えました

578 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:56:45 ]
>>575
bool func(Object t){
if (t.x = 1)
return 1;
else
return 0;
}

みたいなのを作ってremove_if の第三引数に渡す

579 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:57:56 ]
boost::bind使うと楽なんだけどな

580 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:58:42 ]
C++0xだと思わずラムダ式を使ってしまう
C++にもboost::lambdaは使えるけど

581 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 11:06:52 ]
>>578
なるほど、クラスまるごと受け取るのか
やってみる

582 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:05:18 ]
一回の走査で配列から中間値に最も近い値をもつインデックスを見つけることってできる?

583 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:13:08 ]
できたら、ソートのアルゴリズムに大革命起こせるな。



584 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:16:12 ]
え?普通に出来るだろ。

585 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:21:32 ]
>>584
やってみろよ

586 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:25:38 ]
メモリーにインデックスと値の組を保存する。
値の平均を計算する。
平均に最もちかいインデックスを検索する。

587 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:26:10 ]
ソートしておく

588 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:30:08 ]
>>586
2回走査するうえに中間値でもない。

589 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:33:00 ]
ほんとに中間値なら最大値と最小値の間の数は全部中間値ってことになるよ。
平均値の間違いかと思ったよ。
ちなみに走査は一回しかしてないよ。

590 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:37:10 ]
>>587
ソートした時点で既にオーダーが最低NlogNになってまうだろうが
O(N)にはならない

591 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:38:21 ]
590は必要条件と十分条件の区別が付いてないようだな・・・・

592 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:40:45 ]
>>591
いや、区別は付いている
ソートしてあるという前提条件が付いているなら
それは必要条件になる

593 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:42:10 ]
>>589
はかわいそうな子



594 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:45:08 ]
>>589が正しい。

595 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:46:23 ]
そうだな、>>589であってるよ。

596 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:46:41 ]
O(N)⇒一回の走査だけど、
一回の走査⇒O(N)じゃないからね。
一回の走査したあと他に何かする場合もあるからね。


597 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:48:01 ]
>>596
別の配列に移してソートするんですね。

598 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:48:43 ]
>>597
その通りです。

599 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:51:18 ]
>>596
>一回の走査⇒O(N)じゃないからね。

え?

600 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:52:39 ]
一回の走査をするアルゴリズムの略にきまってるだろ。

601 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:55:00 ]
>>598
意味ねえーーー

602 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:28:59 ]
だからソートしたらOが変わるって

603 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:57:55 ]
listでさ
あらかじめある程度の領域確保しといて、足りなくなったら適当な所から取って使う
みたいなこと出来ない?
placement new+仮想メモリ みたいな



604 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:05:16 ]
>>603
そういうアロケーターを書いてあるそのままに作ればいいと思うよ

605 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:37:17 ]
>>603
listにはそのためにアロケーターを指定できるようになっている。
boostにすぐ使えるpoolアロケータが用意されているからそれを使うのが楽
こんな感じ
list<hoge,boost::fast_pool_alocator<hoge>> a;

606 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:24:26 ]
>>596
二回の走査でもO(N)
従って
> O(N)⇒一回の走査だけど、
は間違い。

607 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:46:54 ]
>>605
まじで! ありがとう、使ってみる

608 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:48:31 ]
綴りミスってた fast_pool_allocatorだな。

609 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:55:34 ]
Boostのアロケータか
使ってみたけどあまり変わらんぞ
はっきり言ってあまり期待しない方がよい
標準のアロケータで通常は十分

610 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:05:22 ]
そもそも標準で十分だと思ってるヤツ向けの機能じゃないし。

611 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:07:08 ]
boostって実際使って仕事してる?
規約で禁止されてるところとか多そう。

612 名前:デフォルトの名無しさん [2010/06/12(土) 16:09:06 ]
必要があれば使うけど、基本的には使わない。

613 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:29:53 ]
>>609
意外と標準のnewは速いから大きな差はないな。差がないのはアロケータはスレッドセーフにする必要があるのが要因のようだね。
プールアロケータのメリットはたくさんのオブジェクトを作成、破棄を繰り返すときにヒープの断片化を防ぐ。これはnewの速度低下に地味に効いてくる。
あと、オブジェクトの生成破棄再生成を繰り返すときの高速化ぐらいだね



614 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:54:36 ]
二つ以上のクラスで同じ関数使いまわしたいんだけど何かいい方法ない?

class CA {
void hoge();
}
class CB {
void hoge();
}
void CA::CB::hoge() {
}
こんなイメージ(勿論上はエラー)
まあ二回書けばいいんだけど、中身が数十行あるからうざったい

615 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:57:30 ]
>>614
継承

616 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:05:11 ]
テンプレート関数でできそうな飢餓。

617 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:11:33 ]
普通に
class Choge {
void hoge();
}
class CA:public Choge {
}
class CB:public Choge {
}
void Choge::hoge() {
}
これでいけるか
合ってるよね?

618 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:12:19 ]
is-a に出来ないんだったら絶対にpublic継承は使うなよ
場合によっちゃprivate継承が適切なケースもあるが
なるべくならコンポジションだ

619 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:20:35 ]
もうちょっとわかりやすく!


620 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:21:21 ]
>>617
そのhoge()はなんでメンバ関数なんだ? そこをよく考えて設計するべき。

621 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:33:14 ]
>>617
あってるよ。それでいい。

622 名前:614 mailto:sage [2010/06/12(土) 17:55:09 ]
ありがとうございました!

623 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 19:06:49 ]
std::istringstreamからstd::getline()やらread()やらでデータを取得していって、
さぁ残りの文字列を取得しようとstr()を呼んだら最初の初期化で指定したものが出てきました。
現在の読み込み位置以降の文字列を取得するスマートな方法は無いですか?



624 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 19:21:49 ]
>>623
istreambuf_iteratorでもなんでもいいけど、
istringstreamから残り全部の文字を読み出すようなコードを書くのが手っ取り早いと思う。

625 名前:623 mailto:sage [2010/06/12(土) 20:11:54 ]
>>624
どうもありがとうございます。大当たりです。

std::string str( ( std::istreambuf_iterator<char>(istr) ), std::istreambuf_iterator<char>() );

で期待した動作になりました。

626 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:22:26 ]
c++の学習のためにゲームを作っているのですが、コードを書くごとにどんどんグローバル変数が増えていって困っています。
呼び出し関係のない2つの関数で共通する変数を扱う為にグローバル変数を使う、というパターンがほとんどなのですが、
こういう場合にグローバル変数をなるべく使わないで済ます方法はないでしょうか?

たとえばカーソルを動かして選択肢を選ぶ処理を作るために、
「キーボードの入力を受け取ってカーソルの位置情報を動かす」関数と「位置情報からカーソルを描画する」関数があり、
カーソルの位置情報をグローバル変数にするという感じです。(上記の関数はどちらもゲームのメインループから呼び出しています)

627 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:28:05 ]
>>626
「カーソル位置情報を動かす」オブジェクトが「カーソルを描画する」オブジェクトを参照できるようにしておく。

628 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:33:57 ]
>>626
オブジェクトうんぬんじゃなくて、ただの構造化プログラミング的には

キーボードの入力を引数にとり、カーソルの位置情報を返す関数
位置情報を引数にとり、カーソルを描画する関数
キーボードの入力を受け取って上記二つを呼び出す関数

に分けるとか
そういう風にするだけでも、関数内でそれなりに完結するようになって大分良くなるんじゃないかな

629 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:34:08 ]
カーソル位置情報を関数に参照渡しすれば?

630 名前:626 mailto:sage [2010/06/13(日) 10:44:34 ]
ご回答ありがとうございます。
実は学習のしかたが偏っていたせいか、今まで参照がどんなものなのか知りませんでした。
今参考書をあたりつつ、関数の分け方も考えています。

631 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 11:20:34 ]
listがremove()使ったほうがいいって言われるのはなんで?
一個だけ削除するにもremove使ったほうがいいの?

632 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:22:43 ]
>>631
どこに書いてあった?

633 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:23:52 ]
普通の関数のremoveよりメンバ関数のremove使った方がいいって話と勘違いしてるとか?



634 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:47:08 ]
www.geocities.jp/ky_webid/cpp/library/003.html

>erase() はイテレータを使い、指定された要素を削除します。ただし、list の場合は要素の削除には、 remove() の方を使うべきです。
>remove() は、指定した値を持つ全ての要素を削除します。remove_if() は、削除する要素の条件を指定できるものですが、この辺りは使い方が難しいので説明を省きます。

635 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:06:42 ]
?removeは機能も違うし置き換えにはらんだろう。しかもO(N)じゃないのか?

636 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 17:42:48 ]
>>634
そこ間違いが多いから参考にしないほうがいいよ

637 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:03:17 ]
高橋麻奈著の『やさしいC』を読み終えファイル入出力までは理解できた
次は何すればいい?C以外の言語を学んだ方が良い?

638 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 06:42:49 ]
次は自分で考える事を勉強する、かな

639 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 11:46:43 ]
>>637
書け。


640 名前:デフォルトの名無しさん mailto:void main() (笑) [2010/06/14(月) 13:13:06 ]
>>637
pc12.2ch.net/test/read.cgi/tech/1274827528/

641 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:31:03 ]
ソースファイル落としたら.mの拡張子のファイルも入ってて良くわからないです
明日までにとりあえず動作させなければいけないんで
使い方だけ簡潔に教えていただければ助かります

642 名前:デフォルトの名無しさん mailto:void main() (笑) [2010/06/14(月) 13:39:29 ]
m4 かなあ?

643 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:45:10 ]
mファイルと言うらしいのですが、matlabは触ったことがないので全然分からないのです…
特別なコンパイラとかいるのでしょうか?



644 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:46:38 ]
matlabが必要になります。

645 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:14:58 ]
オーバーフローアンダーフローを検出してくれる整数演算のライブラリってなんかありますか?

646 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 17:54:08 ]
.mってObjective-Cじゃないんかね


647 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 18:39:43 ]
>>645
SafeInt

648 名前:デフォルトの名無しさん [2010/06/14(月) 23:13:49 ]
初期化子でポインタは初期化できないのですか?

649 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 23:15:07 ]
初期化出来るでしょ

650 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 23:24:35 ]
MATLAB なら Octave が free soft。

651 名前:デフォルトの名無しさん [2010/06/14(月) 23:55:01 ]
int i;
sscanf(str, "%d", &i);

これでstrにiを超える桁数の数が入ってたら
適当に丸めてくれるの?
それとも桁あふれになるの?

652 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:29:53 ]
struct Rec {
int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
};

struct Cir {
int type; /* 0なら四角、1なら丸*/
int r; /* 半径*/
};

struct Zukei {
int type; /* 0なら四角、1なら丸*/
};


void RecCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->yoko=10;
(Rec*)hoge->tate=5;
}

void CirCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->r=7;
}

653 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:31:35 ]
PrintMen(void* hoge){
switch((zukei*)hoge->type)
case 0:
sprintf("%d",(Rec*)hoge->yoko * (Rec*)hoge->tate);
case 1:
sprintf("%d",(Cir*)hoge->r * (Cir*)hoge->r * 3.14);
}

main{
zukei* x;
RecCreate(x);
(間にいろんな処理)
PrintMen(x);
}

先輩の作ったモジュール見たらこんな感じのコード出てきたんですが
CreateTri抜ける〜PrintMen行くまでにyoko、tateの情報落ちないんでしょうか?
zukeiへのポインタとしてしかxを宣言してない
(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)んで
yoko、tateの値が入った領域って(間にいろんな処理)の際に
別の変数の為に使われちゃったりしないか気になるんですが。



654 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:39:29 ]
>>653
すごい良くないコードだね。
危惧しているとおりに、違う型で上書きしなければ動くだろうけど。間違いを防止することができない良くないコードだね。

655 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:39:33 ]
ひでぇコードだな

656 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:44:36 ]
C++で仮想関数にすればまだ見られるようになりそうだが

657 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:52:37 ]
回覧板の角で頭ぶっ叩くレベル

658 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:53:30 ]
Cでクラス・継承を実装するのは結構めんどくさいよね

659 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:00:39 ]
>>658
各構造体をunionするしかないか。コンパイラのチェックが効かないから相当危険なコードになるのは間違いないが。

660 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:03:53 ]
Cなら普通にある。キミらが使っているネットワークスタックも同様に書かれている。

661 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:08:53 ]
>>660
IPのアドレス構造体なんかそうだけど。
type値で切り替えるのは有るけど普通じゃないと思う。APIなどのインターフェースとかぐらいだろ

662 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:20:29 ]
xの先はどこで確保されているんだろう。
常識的に考えればRecCreate()で確保するのが関の山だと思うが。

663 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:41:46 ]
>>652はLが無いけど、TLVな構造なんてどこでも使われてるだろ。



664 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:55:24 ]
型をコンパイラがチェックできなくなるんでお勧めできない方法だ

665 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:57:17 ]
すみません。ポインタの変数の値が壊れる事に悩んでいます。
struct DATABOX { int no; bool chk; float *data_a, *data_b; }
この構造体のインスタンス
DATABOX dbox[100]; が有るのですが、

私がまだ理解できていないテンプレートを使った移植クラスの利用の為に
DATABOX* tmp = spDAry[i]->mpObj; // 右の式がテンプレートらしく理解が・・
ここに
tmp->data_a = dbox[i].data_a;
とすると正常通過する時と、dbox[i].data_a側が 0.000000 になってしまう時が有ります。
(デバッグで手前では数値が確実に入っています。必ず0.000000以外の数値で確認済みです。)

ここ以外 dbox[100] を触っている部分は全く無い処理に入ってから壊れるので
ここしか考えられないのです。
ポインタの扱いに慣れておらず、
イコールして右の式が壊れるなんて初めてで、混乱しております。
申し訳ないですが、何がまずそうかできれば推測で構いませんので、助言頂けませんでしょうか


666 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:59:41 ]
>>665
おそらくテンプレートは関係ない。
先ずは周辺のソースを全部出せ。

667 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:02:33 ]
spDAry[i] の i が spDAry のサイズを超えてるんじゃないの?
んで、tmp が変な所指してしまってて、dbox か i かの中身を壊してるとか

668 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:55:23 ]
>>664
お勧めの方法提示してから否定しろよ。

669 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:57:34 ]
C++を使うのがおすすめですよ

670 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:58:12 ]
型をちゃんと指定するのがおすすめですよ

671 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:12:43 ]
OpenCVもCで継承使ってる部分はvoid *だな
C++だと問題ないんだが

672 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:14:56 ]
>>668
C++で継承を使うのがお勧めだろう。
今回の例だと
class Zukei
{
public:
virtual ~Zukri(){}
virtual void PrintMen()=0;
};
class Rec :public Zukei
{
int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
public:
virtual void PrintMen(){//略}
};
class Cir :public Zukei

class Rect :public Zukei


673 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:15:01 ]
他言語から使う以外に手間をかけてまでわざわざCでやるメリットは有るのか?



674 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:15:52 ]
>>672
typeは要らなかったな。こぴぺミスった

675 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:30:14 ]
>>673
新規案件ならC++だろう。
既存コード使うならCを使わざるを得ないだろうけど

676 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:41:59 ]
InitTest::InitTest(QString *p)
: m_str(QString("abc")),
m_pstr(new QString("abc"))

こんな初期化子の使い方ありだと思いますか?

677 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:48:17 ]
pはどこに行ったの?

678 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:53:33 ]
何の問題ですか

679 名前:676 mailto:sage [2010/06/15(火) 22:57:12 ]
>>677
pは消し忘れました
無視してください

>>678
ポインタは初期化子で初期化するのか
コンストラクタの中で初期化するのか気になっただけです

680 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:04:05 ]
ぶっちゃけどっちでもたいした差はないよ
初期化子でnewしてもいいし
初期化子で0クリアして後でnewしてもいい

681 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:05:56 ]
>コンストラクタの中で
そりゃ代入
QString * const m_pstr
だったら後者は使えない

682 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:20:44 ]
>>675
extern Cで十分じゃないか?
同僚にCしか使えないような奴がいるんなら別だけど。

683 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:44:26 ]
C++にはプログラムを見難くする機能が満載である。
>>652の方がずーっとまし。



684 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:45:10 ]
それはないわ

685 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:44:01 ]
>>652 はほとんどC++だからね
どっちがましかと言えば、同じようなもんだけど
C++の方がきれいに書けるだろうね

686 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:35:28 ]
>>653
>zukeiへのポインタとしてしかxを宣言してない
その通り。

>(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)
いや、Zukei構造体分の確保すらどこにもない。

>yoko、tateの値が入った領域って(間にいろんな処理)の際に
>別の変数の為に使われちゃったりしないか気になるんですが。
(間にいろんな処理)の以前、RecCreate()でyoko, tateに代入してる時点で
どこに書いてるのかわからない。
これが死なずに動いてるなら、それはただの偶然。

せめて、
main() {
Rec x;
RecCreate((void *)&x);
...
}
なら、動くだろうと思うけどさ。

687 名前:デフォルトの名無しさん [2010/06/16(水) 19:56:03 ]
ある数字の各桁をそれぞれ別の変数(配列)に代入したいんですが、いい方法ありますか?

688 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 19:57:22 ]
10で割れ

689 名前:デフォルトの名無しさん [2010/06/16(水) 19:58:11 ]
>>688
すみません、もう少し詳しくお願いします

690 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:01:53 ]
ここまでヒントもらって分からないとなるとひょっとすると脳に障害があるかもしれんな

691 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:05:33 ]
for(i = 0; n; i++, n /= 10) a[i] = n % 10;

692 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:08:35 ]
障害があったみたいです、ありがとうございました

693 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:31:37 ]
いいってことよ



694 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:53:47 ]
#include <iostream>
using namespace std;
static const int N = 1024;
static const double L = 1.0;
int main(int argc,char** argv)
{
int i;
double I[N],a[N],b[N];
double dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}
このコードで10,16と18行目でdxの値が変わるんですが17行目でdxを変えるような事はしてないと思うのですが
なんで変わってしまうかを教えてください


695 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:56:01 ]
I[i+1]

696 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:03:56 ]
#include <iostream>
using namespace std;
//static const int N = 1024;
//static const double L = 1.0;
int main(int argc,char** argv)
{
int i,N=1024;
double I[N],a[N],b[N];
double L=1.0,dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}

こっちだったら問題なく一緒になるんですがI[i+1]のところが問題あるんですか?

697 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:08:19 ]
17行目のiが最大な時のi+1は?

698 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:11:43 ]
i<N なんで最終的に i+1=N になってると思うのですが

699 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:15:45 ]
double I[N] は l[0] .. l[N-1]まで

700 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:16:50 ]
配列のサイズを[N+1]にしたら同じになるようになりました
しかしなんで同じになるのか解せません

701 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:38:23 ]
似たようなアドレスにローカル変数ブチ込んでるから配列サイズオーバーして書き込んだ結果だろ。

702 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:26:38 ]
&I[N] と &dx を出力してみると分かるよ

703 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 05:33:56 ]
あとここも直しておくように
>for(i=0;i<=N;i++){ 
>a[i]=1.0; 
>b[i]=1.0; 
>}



704 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 09:02:32 ]
質問してるときはその質問が一段落するまではなんか一時コテでも名乗ってくれや。
>694=>696=>698=>700でいいのか?

705 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 12:48:58 ]
どうでもいい

706 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:27:06 ]
メンバのstd::vector< boost::weak_ptr<T> > container にオブジェクトを追加する関数ですが

share_ptrで受けて
void add(boost::shared_ptr<T> const& sp){
boost::weak_ptr<T> wp(sp);
container.push_back(wp);
}
関数内でweak_ptrを追加するのか

それとも直にweak_ptrを受ける
void add(boost::weak_ptr<T> const& wp){
container.push_back(wp);
}
どちらがよいでしょうか

また、生ポインタを引数にとってうまくやる仕組みはないでしょうか?
それとも生ポインタは受けないようにした方が良いでしょうか?



707 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:32:39 ]
どっちでもいいです

708 名前:デフォルトの名無しさん [2010/06/18(金) 05:47:06 ]
delete a;
delete b;
とすればOKなのですが、
delete a,b;
とするとmemory leakがおきます。なんででしょうか?

709 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:13:03 ]
誰がそんな書き方ができるって言った?

710 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:31:43 ]
>>708
delete(a,b);

711 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:14:01 ]
>>708
delete a,b;
だと, はカンマ演算子なので
delete a;
b;
という感じになってるんだよ

712 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:14:12 ]
え?

713 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:15:32 ]
>>710
死ね



714 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:22:56 ]
delete a, delete b;

715 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:12:34 ]
可変長テンプレートで纏めてデリートがトレンディ

716 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 17:59:26 ]
int a,b;はなぜOKなのでしょうか?

717 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 18:00:52 ]
宣言だから

718 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 20:33:39 ]
delete はああ見えて演算子だからね

719 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 22:39:08 ]
マクロスエースフロンティア[YouTube]
www.youtube.com/watch?v=1yn0fYFnMKk

この動画みたいに、移動する物体(敵)を追いかけながら
曲線を描いて、ビーム、もしくはミサイルのようなものを発射するのって
どうしたら良いのでしょうか?
直線でビームを出すのなら2点間の座標を取ってその間で
動かせばいいと思うんですが
何故曲がりくねらせることが出来るのか分かりません助けて下さい><

720 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 22:48:16 ]
>>560
亀ですまんが、protectedはよく使うだろ

721 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:02:30 ]
>>719
毎フレーム玉とターゲットの位置を調べて軌道修正してる。あとスレチな

722 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:20:10 ]
>>720
どんな時に使うんだ?

723 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:42:05 ]
protected継承の話じゃなくて、protectedメンバの話だよな?
使う使う。



724 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:43:38 ]
>>560はprotected継承の話だぜ
まあ滅多に使わないな

725 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 00:07:29 ]
>>724
んじゃ、>>556に対して>>560が的外れなレスをしちゃったってことか。
>>556はprotectedメンバについての話をしてるもんね

726 名前:デフォルトの名無しさん [2010/06/20(日) 16:49:11 ]
メンバ変数をコンストラクタで全部0にしたいんだけどどうするのが定石?
floatとかはとりあえず考えない感じで
memset(this,0,sizeof(this));とかできんの?

727 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 17:01:18 ]
>>726
memsetは危険。できない。
メンバー変数にはコンストラクターを持つ型を使用すれば、それらは自動的に初期化される。
コンストラクターを持たない型はboost::value_initializedを使う方法がある。

728 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 17:20:11 ]
なるほど。ありがとう!

729 名前:デフォルトの名無しさん [2010/06/22(火) 15:16:18 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10731.txt
// read fd_orgfile and write on fd_cpyfile
for (;;) {
size_t read_size;
char buf[1024];

read_size = read(fd_orgfile, buf, sizeof(buf));
if (read_size == 0) {
break;
}
write(fd_cpyfile, buf, read_size);
}
に複数間違いがあると言われたのですが分かりません
お手数ですが教えて下さい!

730 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 15:31:01 ]
>729
エラー処理ができていないってことかな。

read はエラーが発生すると -1 を返すけど、size_tはunsignedなので受け取れないとか。
(read_sizeに-1を代入すると MAX_UINTにかわってしまう。 (size_t)-1 と比較すればいいんだけど。)
どうせ、1024より大きな値が返ることはないので, int read_size にしておけばいい。
writeの戻り値をチェックしていないとか。



731 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 18:50:09 ]
コンストラクタTest()の中で別のコンストラクタを呼び出したいのですが
※1のようにしてTest()を実行しても変数nameは空のままです。
※2のようにするしかないのでしょうか?
---------------------------------------
※1
Test(){
Test("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}

---------------------------------------
※2
Test(){
setName("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}

732 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 19:03:01 ]
>>731
C++0x準拠のC++ならこう書けるけどね

Test() : Test("名無し") {
}

733 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 20:53:33 ]
>732
ありがとうございます。
記述を変更したところ、
E2312 test.cpp 13: 'Test' は曖昧でない基本クラス 'Test' ではない(関数 Test::Test() )
よろしくお願いします。



734 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:04:38 ]
C++0xだとと書いてあるね。

735 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:37:32 ]
ありがとうございます。
了解です。

736 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:46:12 ]
>>732
これVC++2010でも対応してないんだよなあ
すっげー期待してたのに

737 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 01:36:51 ]
while(!関数名)ってあったんですけどこれってどういう意味なんでしょうか?
もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。

738 名前:デフォルトの名無しさん [2010/06/23(水) 01:47:11 ]
>>737
0を返すまでループ、って意図じゃないのか


739 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 02:00:01 ]
>>738
よく分かりました。
ありがとうございます!

740 名前:デフォルトの名無しさん [2010/06/23(水) 02:35:26 ]
日本語にするなら、1が返っている間はループ、ほうが多いかな
まあどっちでもいっしょだけど


741 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 02:45:31 ]
関数が0を返してる間はループだろw
正反対じゃねーかよ

742 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 03:37:50 ]
>>740
1が返ってきたら抜ける、と読み替えたとしてもまるでダメだな

743 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:11:13 ]
while (somefunc() == 0) って書くほうが意図がはっきりしていていいじゃないか。



744 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:50:04 ]
while(! isReady())
分かりやすい

while(isReady() == 0)
分かりづらい

745 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 10:05:20 ]
while(isReady() == FALSE)
これでおk

746 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 11:58:18 ]
LPVOIDから(ry

環境 XPSP3, VC++2008EE
DDSURFACEをDIBに変換して色情報をLPVOID lpvBitsから R=0x0F とかいう具合に
取り出したいのですが, どのようにすればいいでしょうか?
フックするのに必要だったので#define CINTERFACE してます
bool Screenshot(LPCTSTR FileName, LPDIRECTDRAWSURFACE7 lpDDS)
{
if (!FileName || !lpDDS) return false;

bool Success=false;
HDC SurfDC=NULL; // GDI-compatible device context for the surface
HBITMAP OffscrBmp=NULL; // bitmap that is converted to a DIB
HDC OffscrDC=NULL; // offscreen DC that we can select OffscrBmp into
LPBITMAPINFO lpbi=NULL; // bitmap format info; used by GetDIBits
LPVOID lpvBits=NULL; // pointer to bitmap bits array
中略)
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, NULL, lpbi, DIB_RGB_COLORS))
ERROR_BREAK(5);
if ((lpvBits = new char[lpbi->bmiHeader.biSizeImage]) == NULL)
ERROR_BREAK(6);
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, lpvBits, lpbi,
DIB_RGB_COLORS)) ERROR_BREAK(7);

ここのlpvBits[x+y*width]から取り出す場合どうすればいいのでしょう.
32bitBitMapだと仮定します.widthは中略内で宣言されてます

747 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:36:11 ]
codepad.org/b91JkFQh

これでセグっちゃうんですが何がいけないんでしょうか?
gdbで見てみたら
#0 0x00007ffff7ab3dd9 in vfprintf () from /lib/libc.so.6
#1 0x00007ffff7abecb8 in fprintf () from /lib/libc.so.6
#2 0x000000000040076c in main (argc=1, argv=0x7fffffffe8a8) at print.c:24
こんなエラーがでてきます

748 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:44:37 ]
そのループでいいのか?

749 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:50:44 ]
fopenの回数とfcloseの回数が全然違う。

750 名前:747 mailto:sage [2010/06/23(水) 12:52:01 ]
正しくはiのループはfprintfの上にあるべきだと思うんですがそれでもエラーでるんでいろいろ試してました

751 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:57:11 ]
fopenしっぱなしでfcloseしないでいると、一つのプロセスで開いておけるファイル数には制限があるので
そのうちfopenに失敗してfpがNULLになってsegvしている。

752 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:59:31 ]
何がしたいループなのかよくわからん。
datはいくつ作りたいんだよ?

753 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 13:03:38 ]
codepad.org/NKFODky7

これで自分のパソコンでは動くようになりました
ありがとうございました



754 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 13:04:28 ]
セグっちゃう

755 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 13:42:35 ]
セグウェイに乗れってことだろw

756 名前:746 mailto:sage [2010/06/23(水) 14:01:17 ]
代わりにgdi+になげて何とかしてみましたが,
たまに一般的エラー?をはきます。
fail safeかけて今のところ順調に動いてますが, 不安定なモジュールなのでしょうか.


757 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 14:10:51 ]
>>756
二行目の . が 。になってるYO

758 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:26:15 ]
>>753
世の中夜勤帰りで朝から寝てる人だっているんだよ?
引っ越しの時ちゃんと挨拶行った?
顔合わせたら軽く会話するとかしてちゃんとコンタクト取り続けてる?
日頃からそういうコミニュケーションが取れてればいつ洗濯機を回していいのか
いつ静かにしなければならないのか
迷惑を掛けないように生活出来るはずなんだが

759 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:43:02 ]
>>758
死ね

760 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 01:57:45 ]
VC++2005のMFCについて質問です。
数値(BYTE型)を入力するエディットボックスを使用します。
DELETEキー等でボックス内の値を未入力状態にすると
「0から255までの数値を入力してください」と出るのですが
これを表示させない方法があれば教えていただけますか?

761 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:26:49 ]
>>758
表札すら出してない隣人どもにわざわざ挨拶なんてしない
仮にしたとしても世間話にすらならないので相手の生活は基本推して知るべしだな

762 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:29:15 ]
>>760
値のチェックをしなけりゃいい

763 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 00:20:52 ]
>>762
値のチェックを有効にしたままメッセージだけ出さないように
したいんです。
自分で範囲を決める場合(たとえば1から10までを入力可能範囲
にする)ならメッセージだけ回避する方法はわかるのですが、
型の入力範囲(BYTEなら0から255)そのものに対するチェックを
有効にした上でメッセージだけ回避したいのです。



764 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:26:35 ]
>QIODevice::QIODevice() : QObject(*new QIODevicePrivate, 0)
コードを読んでいたらこんなのを見つけたわけですが、
なんでnewの前に *を付けるんですか?

765 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:35:18 ]
newで返ってくるのはポインタ型。 それに*をつけて参照型にしてるだけ。

766 名前:デフォルトの名無しさん [2010/06/27(日) 11:28:46 ]
「初期化子リスト」の読み方ですが、
「しょきかし・りすと」 or 「しょきか・こりすと」
どっちが正しいのでしょうか?

767 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:32:35 ]
>>765
まて、それどうやってdeleteするんだ?

768 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:33:16 ]
>>766
しょきかし・りすと

769 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:54:59 ]
>>767
関数内じゃね?
出来るのか出来ても意味あるのか知らんけど。

770 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:07:16 ]
>>769
たしかに、参照で受けたのをdeleteするって変だよね

771 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:08:08 ]
>>767
&つけてdeleteすれば問題はない

772 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:11:17 ]
それは参照の使い方として正しいのか?

773 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:17:22 ]
出来ると思うけどあまりいいコーディングとは思えないな
shared_ptr使うのが吉



774 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:40:15 ]
規格上問題はない
まあ生のポインタを保持する時点で気持ち悪いが

775 名前:766 mailto:sage [2010/06/27(日) 14:43:27 ]
>>768
ありがとうございます。

776 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:40:57 ]
pgm画像に空間フィルタをかけて、平滑化を行うプログラムを、C++で書いているのですが、
実行後の出力画像が分身(?)してしまいます。
何が原因なのでしょうか?

ソースファイル、原画像、出力画像はこちら。
www1.axfc.net/uploader/Sc/so/128110.lzh&key=noisy
プログラムはBCC Debeloperで組んでいます。

777 名前:764 mailto:sage [2010/06/27(日) 21:05:04 ]
一応フレームワークのコードなので、
フレームワーク側で何とかしてくれているんじゃないですかね

778 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:14:28 ]
>>776
読み込むときに横方向と縦方向が逆になってると思う

class.cpp
     41         hig=HIG;
     42         for(int i=0;i<hig;i++){
     43                 for(int j=0;j<wid;j++)
     44                         fscanf(fp,"%d",&pix[j][i]);
     45         }
main.cpp
     43         for(int i=0;i<HIG;i++){
     44                 for(int j=0;j<WID;j++){
     45                         fprintf(fp,"%d\n",op[j][i]);
     46                 }
     47         }

779 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:24:03 ]
template<class T>はclass T;と同じニュアンスで書いているのですか?

780 名前:776 mailto:sage [2010/06/27(日) 21:49:53 ]
>>778
解決しました! ご協力感謝いたします。
www1.axfc.net/uploader/Sc/so/128162.pgm&key=noisy

781 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:55:03 ]
List[5][2][20]の配列のi番目をaと置き換えたく
List[i][0]='a';
List[i][1]='a';
としたのですが、「式は変更可能な左辺値である必要があります」と
エラーが出ました。
どうしたらいいですか?



782 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:58:43 ]
>781
i番目がどこなのかさっぱりわかりませぬ。
エラーメッセージの通り、左辺が変更可能では無いのでしょう。

Listはどのように宣言していますか?

783 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:58:57 ]
>>781
要素数が一個足りないような……。



784 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:05:18 ]
なんとなく
strcpy(List[i][0], "a");
とかやりたいのかな、なんて思ったり

785 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:05:25 ]
>>783
×:要素数 ○:添字

786 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:20:05 ]
補足です。
char List[5][2][20] です。

int i;
printf("削除したい番号を入力:");
scanf("%d",&i)
List[i-1][0]='a';
List[i-1][1]='a';

入力した番号の配列を削除するのが目的ですが
置き換えたほうが後に便利なので置き換えたかったのです・・・。


787 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:28:04 ]
List[i-1][0]='a';
List[i-1][1]='a';

の行を、

strcpy(List[i-1][0],"a");
strcpy(List[i-1][1],"a");

に変えればいいと思います。

回答とは関係ないですが、
Listは、「文字列の」2次元配列ってことですか?

788 名前:786 mailto:sage [2010/06/27(日) 22:44:00 ]
>>787
どうもありがとうございます!
成功しました。
えっとちなみにstrcpyを使わない方法はないでしょうか…?

あと自信はないですが、文字列の3次元配列だと思います。

789 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:51:34 ]
string使えばいいと思うよ

790 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 23:15:22 ]
>>788
文字の3次元配列だと思うよ。

strcpy使わないならこんな感じ。
List[i-1][0][0] = 'a';
List[i-1][0][1] = '\0';
List[i-1][1][0] = 'a';
List[i-1][1][1] = '\0';

791 名前:786 mailto:sage [2010/06/28(月) 00:01:38 ]
>>790
成功しました!!!
どうもありがとうございます!!

792 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 06:18:57 ]
ゲーム画面の文字を自動で取得してテキスト化にするには
どうすればいいですか?
というか、可能ですか?

793 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 07:04:16 ]
ゲーム画面を取り込んでOCRにでもかければ?



794 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 10:46:53 ]
>>792
ゲーム毎に対応が異なってくるので、制作者にご相談ください。
相談できないような内容なら、この板のローカルルールに則って然るべくどうぞ。

795 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 22:38:05 ]
>786>790

もう解決したみたいだけど、
>入力した番号の配列を削除するのが目的ですが
配列を削除?ってのがちょっと引っかかる。

ほんとにやりたいのはこれじゃない?
List[i-1][0][0] = '\0'
List[i-1][1][0] = '\0'

796 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 22:45:12 ]
>>795
削除するのをあきらめて置き換えにしてるわけで、空文字列にするのは置き換えのほうに分類されると思う。
ほんとにやりたいのはmemmoveで解決できたんじゃないかな。

797 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:03:02 ]
質問です。
私の環境はVC++2010、2008ですが、C++の言語全体として
答えていただけると幸いです。

enum E
{
E1,
E2,
}:

のようなenumがあったとき、E2 | E1 は、int になるらしいです。
ということは、

E e = E1 | E2;

に警告が出ます。
この辺のenumの取り扱いとして、

1. ビット演算のような用法 ( e = E1 | E2; )
2. まさにenum的な用法 (どれかひとつ)

ざっくりと、2種(または混合)があると思うのですが、この辺、何かしら
指針、指標のようなもの、もしくはベンダからの情報等はあるのでしょうか?

ベンダー依存でもいいので、何かしら情報があれば、よろしくお願いします。

798 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:06:56 ]
>>797
enumはフラグじゃないんダナ

799 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 22:14:58 ]
enum E{
 E1 = 0x1,
 E2 = 0x2,
 E3 = E1 | E2
};
または
E e = static_cast<E>( E1 | E2 );
だけどcastするぐらいだったら
int e = E1 | E2;
にして E1、E2もconst int 型にする方が良いと思う。(またはstd::bitset)

E e = E1 | E2;
はgccのc++0xではErrorになる

800 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 23:48:14 ]
>>797
> 1. ビット演算のような用法 ( e = E1 | E2; )

それはない。


801 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 22:21:04 ]
C++では列挙子同士のビット演算の結果を
その列挙型にキャストなしで戻せないからね
ビットフラグを扱う変数は普通の整数型にするしかない

個々のビットフラグをconst intで定義するかenumで定義するかは趣味の領域か

802 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 04:09:20 ]
C++の場合、暗黙のうちに整数型へ昇格されるから各種演算が可能なだけで、
列挙型の演算自体はデフォルトでは定義されないからな。
Cなら列挙型への暗黙の型変換があるから何でもできるが。

803 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 12:16:07 ]
inline関数化して違う型同士のビット演算を弾くべき



804 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 15:38:12 ]
コギレイに static const へ乗数入れる方法教えて。

805 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 17:14:09 ]
いみふ

806 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:16:07 ]
ファクトリでインスタンス生成して複数の他のオブジェクトに所有させるとき
削除の責務を何処に負わせるのが良いでしょうか?

共有してる側に負わせると、共有側それぞれの寿命までキニシナイと行けないようになるし
ファクトリにどんなインスタンスを生成したか記憶させるようにして
動作終了時にごそっと削除させてしまうべきか・・・?

807 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:36:50 ]
よろしい君にshared_ptrを使う権利を与えよう

808 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:39:03 ]
スマポが基本じゃね

809 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 19:03:47 ]
using namespace boost;
bind( CHoge::hoge , this , 50 , _1 , _2 , _3 );

を c++0xでboostを使用せずに記述する方法は無いでしょうか。


810 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:09:57 ]
>>804
staticメソッド作っておいて初期化でそれ使うぐらいしか思いつかん

811 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:10:45 ]
ラムダ関数は使えないのか?

812 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:56:51 ]
テンプレートの例題を見ると、変数xとyの値を交換するってのがある
こんなの本当にプログラミングで使うのか?
テンプレートってobject型の代わりに使っているような印象を受けるんだけど

813 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 21:07:19 ]
swapを使うこともない程度のプログラムしか書かないなら、たぶん一生テンプレートの恩恵は理解できない



814 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:19:55 ]
>>811
ヒントありがとうございます

f = [this](int a1,int a2,int a3) -> void { hoge(a1,a2,a3); };
で解決しました( VC10で確認 )
ただ残念な事に gcc4.4 を使用しているので当面は boost::bind の方を使用します。
半年待ちかな


815 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:35:28 ]
配列のバッファオーバーランが生まれてる場所って知る方法ないの?
どっかでぶっ壊れてるんだがまったく特定できん…

816 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:05:03 ]
assert使えばいいじゃない

817 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:48:43 ]
>>815
デバッガにメモリの特定の箇所が変化したら止まる機能があるかもしれないから、
毎回決まった箇所が壊れるなら、それ使えばいい。
VSにはあった。

818 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 09:36:58 ]
>>817
まじで。スレ違いだけど教えてもらっていい?vs2008proで出来る?

819 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 11:17:42 ]
>>818
手元に2008がないから確認できない。
2005proなら、メニューの「デバッグ」→「ブレークポイントの作成」→「新しいデータブレイクポイントの作成」でできる。


820 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 11:38:27 ]
>>819
出来た!ありがとう!

821 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:25:14 ]
>>820
選択できないんだけど、どうすればいい?

822 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:26:34 ]
あ、ごめんデバッグ中にやればいいのか。

823 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:52:44 ]
int/intをやったときに小数点以下が「切り下げ」られるってのは保証されてる?



824 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:57:29 ]
うん

825 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 00:18:31 ]
てんきゅー

826 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 00:26:32 ]
>>823
-x/y だと 89 と 99 で結果が異なる CPU もあるんじゃなかったけ?
たしか、89 だと CPU 依存で 99 だと厳密に来ていされていたような気が…
# 完全にうろ覚え


827 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 01:49:05 ]
>>826
つttp://seclan.dll.jp/c99d/c99d05.htm

828 名前:デフォルトの名無しさん [2010/07/03(土) 13:10:28 ]
gcc4.2 mac osx で次のコードがコンパイルできません。不可能なのでしょうか。ご教授下さい。

template< class T >
class A
{
public:
A()
{
std::vector< A< T > > vec;
}
};

829 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:20:08 ]
>>828
vectorのところでA<T>のサイズが決まらないからじゃなイカ?
vector<shared_ptr<A<T>>> vec;
で試すでゲソ

830 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 17:52:30 ]
explicit なんですか、これ?

831 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 18:25:56 ]
暗黙的型変換を抑制するキーワード

832 名前:830 mailto:sage [2010/07/03(土) 19:29:19 ]
>>831
thx

833 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 01:29:47 ]
Windows 7
Borland C++ 5.5.1で、カラー画像を指定した閾値で2値化するプログラムを書きました。

プログラムで処理した画像をout.bmpとして出力しているのですが、
この画像をプログラムを終了させることなく表示する方法はありませんか?



834 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 01:35:46 ]
閉じろ

835 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 07:57:20 ]
>>833
GUIを扱えるように勉強する

system関数等でwindows付属のビューア等を呼び出す

あたりかな


836 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 09:29:48 ]
>>833
C#使え

837 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 03:50:48 ]
system("out.bmp");

838 名前:デフォルトの名無しさん [2010/07/05(月) 14:21:21 ]
出力と入力が決まっていない関数は
f(cin , cout );
って感じの関数を作ればいいですか?
cinとかをfinとかに変えても動作するみたいにできますか?

839 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 14:34:45 ]
Foo f(std::istream& in, std::ostream& out);

840 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 15:04:45 ]
ありがとうございます。

841 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:16:42 ]
ヘッダファイルって何であるんですか?
ヘッダファイルはコンピュータにとって何処が美味しいの

842 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:21:53 ]
ヘッダーはコンパイラのためにあるよ

843 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:22:07 ]
>>841
ja.wikipedia.org/wiki/%E3%83%98%E3%83%83%E3%83%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB




844 名前:デフォルトの名無しさん [2010/07/06(火) 06:27:36 ]
vector<クラス*>のobjがあって(* objのイタレータ)->idというint型のメンバがあるのですが
vector<クラス*>の要素数は最大10個で
idは1〜10までの整数で、重複しないようにしたいのです
vector<クラス*>に要素を追加した時にそのidメンバに他のvector<クラス*>の要素が持ってない整数を入れたいです
例えば今要素5個のvctor<クラス*>があったとして前から並べた時にidが3,5,2,6,0のような場合に
6個目のvector<クラス*>を作ってそのidに3,5,2,6,0以外の1〜10の整数のうち一つ(無い値ならなんでも良い)を入れたいのですがどうすれば良いでしょうか?

845 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 07:00:37 ]
vectorじゃなくてmapを使う

846 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 07:04:42 ]
10個程度なら、総当りで使ってない整数を探したらいい

847 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:15:56 ]
>>844
たとえばクラスをFooとする。
Foo *valids[10] = {0};

vector<Foo *> v;
for (int i = 0; i < 10; i++) {
 if (!valids[i]) {
  Foo *foo = new Foo();
  foo->id = i;
  v.push_back(foo);
  valids[i] = foo;
 }
}

848 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:27:05 ]
ユニークな整数のリストを共有して
そこから借りたり返したりする


849 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:07:25 ]
入門Qt4プログラミングで

OvenTimer::OvenTimer(QWidget *parent)
 : QWidget(parent)
{
 //関数の中身
}

という表現があるのですが、
「: QWidget(parent)」の部分は何を意味しているのでしょうか?
OvenTimerクラスはpublicでQWidgetクラスを継承しています

850 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:10:36 ]
>>849
C++の基礎を勉強しなおせ
基底クラスの初期化子


851 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:23:30 ]
>>850
ベースクラスのコンストラクタの引数がポインタなことに違和感があって、
何か意味があるのかなと。。。参照ならしっくりくるんですが。

私に基礎がないからなんですね?頑張って勉強します。

852 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:34:22 ]
>>851
がんばれ

853 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:16:47 ]
> ベースクラスのコンストラクタの引数がポインタなことに違和感があって、

なんでだよw そのコンストラクタの引数も単にポインタでしょうにw



854 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:50:11 ]
>>853
コピーコンストラクタとかでは参照で受けるようにするのが普通だと思っていて、
そのコンストラクタを呼び出してもいいはずなのに、あえてポインタで受けるコントラクタを用意して
そのコンストラクタを呼び出すのは何か理由があるのかなと思ってしまったんです。

サブクラスのコンストラクタでベースクラスのポインタを受けるのは、
そのベースクラスがisでなくhasな場合もあるだろうし、
あまり違和感を感じないんです^^;

そもそも自身のポインタを受けるコンストラクタって用意するのが普通なんでしょうか。
ってことからわかってない><

855 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:02:51 ]
> そもそも自身のポインタを受けるコンストラクタって用意するのが普通なんでしょうか。

厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
自身のポインタを受けるコンストラクタっていう表現が。
コンストラクタにそのインスタンスのthisポインタを渡すことなどできない(?)し、
コンストラクタの初期化リスト呼び出しが終わったあと、
コンストラクタ本体へ処理が移らないとthisは使えない。

自身のポインタってのがQWidget(parent)に対する、
QWidget *parentのことであるとするなら(多分そのつもりなんだろうけど)、
クラスとインスタンスの違いが分かってない可能性すらある。
分かってるんだとしたら、そういう質問出てこないと思う。

たとえば、古典的なリンクリストを実装しようとしたら、
Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
双方向だとしたらNode::Node(Node *next, Node *prev)ってのがあって不思議じゃない。

GUIのコンポーネント間に親子関係があるとき、
親が子を知っていることにくわえ、
子が親を知っていることもあたりまえによくあること。
だから、OvenTimer(QWidget *parent) みたいにコンストラクタで親オブジェクトを渡す。

コンストラクタだからどうあるべき、ってんじゃなくて、
あくまで用途ありきでオブジェクトやクラスなんかもあるし、
どういうコンストラクタを設けるかも、あくまで用途次第。

> そのコンストラクタを呼び出してもいいはずなのに

つまり、コピーする目的じゃ無いと思われ。

856 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:18:13 ]
>>855
ありがとうございます。

>厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
インスタンスの話ではなく、型の話です。ですから this のことはないと思っています。

>Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
リンクのノードならしっくりきます。全然普通です。

>つまり、コピーする目的じゃ無いと思われ。
ということなんですね。よくわかりました。謎が解けました。
自身の(コピーによる)初期化ではなくて、あくまでメンバの一つにそのポインタを格納しているんですね。

そういう想像が直ぐにできなくて、不思議な書き方だなと思ってしまいました。
勉強になりました。ありがとうございました。

857 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:20:40 ]
>>856
>メンバの一つにそのポインタを格納しているんですね
それも違う・・・・・
いいからC++の勉強やり直してこいって

858 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:31:02 ]
>>857
例えばノードの場合だったら、
Node::Node(Node *next) {
// m_next 以外の初期化
m_next = next;
}
だと思ったので、同じように
m_parent = parent;
というコードがあるんだろうと理解したんですが・・・

うーん、なんかまだまだわかってないことがありそうですね、
まだ3週目ですし、もっと勉強してから質問します。失礼しました。

859 名前:849 mailto:sage [2010/07/06(火) 19:50:52 ]
勝手に話が進んでてワロタ

>>850
どうもありがとう

860 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:17:50 ]
質問です。boost または stl の function です。

std::function<A(B, C, D)> func1;
std::function<A(C, D)> func2;

B b = 10;
func2 = xxx(func1, b);

上のように、テンプレート引数Bのみを拘束する、汎用的な xxx のような
機能をする関数とかありますでしょうか?

bind だと、引数ごとにプレースホルダが必要ぽいので、面倒なんです。

よろしくお願いします。

861 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 12:33:51 ]
質問です
音を扱うプログラムにて
#define RATE_44100 0xac440000
という定義を見ました
16進数でac44が10進数の44100に相当することは分かっているのですが、そうすると定義のように
0を余計に4つもつけている意味はなんでしょうか?
はじめ16進数でac440000が44100相当なのか、でも計算が全然合わない、と悩んだのですが・・・

862 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 12:40:16 ]
上位16bitと下位16bitに分けてるんだよ。

863 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 12:42:43 ]
すくなくともそのまま整数での意味じゃないよなその名前。

$ ruby -e 'p 0xac440000'
2890137600

$ ruby -e 'p 0xac44'
44100

なんかしらのビット演算をしようとして、
ac44を44100と名づけなおすことに何かメリットがある、
からそうなってるのか、
あるいは勘違いか。



864 名前:861 mailto:sage [2010/07/07(水) 12:54:27 ]
釈然としませんが半ばブラックボックス関数で扱われている数値であるので>>862で指摘されたとおり、関数内部で上位下位16bitで分けられていうるようです。

>>862-863
すばやいご返答ありがとうございました。

865 名前:デフォルトの名無しさん [2010/07/08(木) 03:55:10 ]
タイマーを使いたいのですがSetTimerは引数にHWNDがあるのでいろんな場所で使えませんよね?
HWNDを引数に持たない自分で作った関数の中でタイマーをセットするにはどうすれば良いのでしょうか?

866 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 03:59:19 ]
ヒント:SetTimerの第四引数

867 名前:宮城たった mailto:sage [2010/07/08(木) 05:56:21 ]
>>866
調べてみましたがよくわかりませんでした
void hogeA()
{
この関数中で大麻を窃盗
}

CALLBACK MsgProc( HWND hWnd〜)
{
大麻が経過したら最悪ここでhogeB関数をする、KillTimer
}
という感じにしたいのですが大麻 凍る獏関数というのが使えるのでしょうか?どうすれば良いのでしょうか?

868 名前:みやぎたった mailto:sage [2010/07/08(木) 06:24:57 ]
型だけ同じコールバック関数を作ってその関数の名前を第四引数に入れたらいいんだな
わかりやすく書けよ
乙!ありがとな!

869 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:59:36 ]
monodevelopで#include <stdio.h>

int main (void)
{
int num;
num = 0;
float f;
f = 0;

printf("整数を入力してください:");
scanf("%d", &num);

printf("浮動少数点数を入力してください:");
scanf("%f", &f);

printf("%d ", num);
printf("%f", f);

return 0;
}
を実行しても

整数を入力してください:浮動少数点数を入力してください:0 0.000000

と表示されるだけで入力ができません
何か問題があるのでしょうか?

870 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 19:26:45 ]
>>863
RATE_44100から、CDのサンプリングレート44.1kHzを連想出来ないキミはPGに向いていない。
これだからruby脳は…

871 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 19:34:28 ]
>>870
うるせー馬鹿w
CDのサンプリングレート44.1kHzなんか知らないっつーの。

872 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 20:33:17 ]
LZ法で圧縮したっていうデータのバイナリを見たら
データの中間辺りで、00 00 00 00と00が凄い連なっていたんだが
LZ法でこういうデータを吐き出すケースってどんな時?
スライド窓とか大きく確保しても、こうならないと思うんだが…

873 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 20:36:51 ]
870の方が馬鹿だね。



874 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 21:01:27 ]
>>872
0が1Gバイトくらいじゃね?

875 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 22:05:23 ]
1G所か10G合っても連なるのか怪しいな

876 名前:デフォルトの名無しさん mailto:void main() (笑) [2010/07/08(木) 22:08:28 ]
>>871
これだから ruby 脳は‥‥‥。

877 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 23:38:15 ]
下位アドレスを豪快に端折ってるコンテナ形式とかだったら詰め物の可能性もあるね

878 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 00:02:29 ]
>>871
無知自慢しなくていいぞ。ruby脳

879 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:27:58 ]
プログラムで生成した画像データを連番のファイル名で保存したいと思っています。
for(i=0;i=<100;i++) sprintf(str,"out-%d.jpg",i);
というプログラムを書いたのですが、出力は
out-0.jpg out-1.jpg・・・out-10.jpg ・・・ out-100.jpg
と桁がそろっていない形になっています。
出力する数字を3桁にして、out-0.jpgをout-000.jpgとなるようにする場合、
どうしたら良いですか?


880 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:59:00 ]
%d -> %03d

881 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 16:55:13 ]
struct{
std::string text;
int number;
int count;
} data;

std::vector<data>
このようなdataの配列があるとして、textとcountが重複している要素があったら重複しないようにしてcountは足すという事をしたいのですが、
単純に前から順に比較していって新しい配列に結果を格納していくという方法しか思いつきません。
速い方法があったら教えて頂きたいです。

882 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 18:52:35 ]
>>881
どういう処理をさせたいのか分からないけど、
その構造でそういうやりくりするのって、
すっげー始末が悪いと思う。

883 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 20:00:05 ]
>>881
>textとcountが重複して
textとnumberが重複してたらcountを足すんじゃなくてtextとcountなんだな?
じゃぁvectorの全走査でしかたないんじゃない?
判定に使うcountが変動するんじゃ、
単純に前から比較しなくて済む方法使った場合格納時に並べ直す必要が出ちゃうし



884 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:12:24 ]
24bitのビットマップで表現出来る色(256^3)色をすべて含めた1枚の画像を作りたいです。
1画素に1色とすると(256^3)画素が必要だと思うので、
√(256^3) = 4096で、4096×4096の画像を出力することになりますよね?
そこで、出力用の配列としてimage_out[4096][4096][3]という配列を用意したのですが、うまく色が入ってない様です。

for(i=0;i<255;i++){
for(j=0;j<255;j++){
for(k=0;k<255;k++){
image_out[l][m][0]=k;
image_out[l][m][1]=j;
image_out[l][m][2]=i;
m++;
if(m==4096){
m=0;
l++;
}
}
}
}
この様なプログラムを書いたのですが、どう修正したら良いでしょうか?


885 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:30:17 ]
なんで<255

886 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:47:27 ]
あー 256か<=255か・・・・
でも、同じ色の菱形ができるんです・・・

887 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:57:20 ]
スレ違いかも知れまんが質問させてください。
現在中学二年生で工科高校のシステム科を受験しようと考えています。
それに伴い、C言語を学習しようと考えているのですが、どのような事をまなべばいいのでしょうか?
いままでHSPというwindows用のインタプリタ言語を使いゲーム制作をしてきました。
C言語でもゲーム制作を学習して良いのでしょうか?それともゲームなどとはちがうソフトウェア制作を学習したほうが良いのでしょうか。

888 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:58:47 ]
>>887
ゲームで学ぶことを知っているのなら、
ゲームで学んで十分。
構造体やポインタ、メモリの動的確保。
全部ゲームで押さえることができる。

889 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:59:37 ]
むしろゲームは集大成っていう

890 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:03:53 ]
普通高校に行きなさい

891 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:06:35 ]
工業高校は高卒で地元企業で一生下っ端もしくはたたき上げになるつもりがなければ行くメリット無し。
普通の進学校いけ。プログラミングは学校で学ぶもんでもない。
やりたいことなんていつ変わるかわからんのだし。

892 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:07:39 ]
プログラミングは独学するやる気があるなら全く学校に拘る必要はない。

893 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:17:05 ]
これからのIT産業は斜陽産業だぞ?
景気の良かった頃でもゲーム開発は社員の寿命が短かった
(若くても辞めざるを得なくなる)
あまり勧められんなぁ



894 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:18:33 ]
入り口はどうあれ、結局最後は独学だよな。
いかに言語の規格を正しく理解するか。
コードをいっぱい読んでイディオムを見出し、
設計に躓きまくってデザパタにも親しむ。
APIリファレンスとホワイトボードだけが友達。

895 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:31:26 ]
はっきり言って常に新技術の勉強を続ける覚悟がいるぞ。

896 名前:名無しさん@そうだ選挙に行こう mailto:void main() (笑) [2010/07/10(土) 22:36:28 ]
>>895
若い頃は簡単でも歳食うとこれがまあかなり難しい。

897 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:52:03 ]
みなさんありがとうございます。
別にゲーム制作を本業にするつもりは全くないです。
ただ工科高校のシステム科は就職率が高いとのことなのでそちらを進路に選択しました。
家庭事情的にも働かなければいけないので大学に行けないので…

それならプログラムをまなぶ前にパソコン検定などの資格を取り、基本的な操作を学んだほうがいいのでしょうか?

898 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 22:54:45 ]
書き込んでから気付いたのですが、はげしくスレチですね。
スルーで構いません。無駄レスすみませんでした。

899 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 01:35:04 ]
このご時世高卒がありつける仕事なんてどこ行こうが変わらんよ

900 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 13:53:43 ]
マ板に帰れお前ら
あと>>887も行け
スレチどころか板違いだ死ね

901 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 14:06:37 ]
        ハ,,ハ
       (*゚ω゚ )  >>900お断りします
.       (=====)
      _(_⌒) )
    /\  `J  ̄ ̄\
     ̄ ̄ ̄ ̄| | ̄ ̄ ̄
            |
          / \
             ̄

902 名前:名無しさん@そうだ選挙に行こう [2010/07/11(日) 20:28:31 ]
2ch書き込み用のライブラリって何がありますか?


903 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 22:30:51 ]
socket.h



904 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 22:53:05 ]
>>903
有難うございます
ググって見ます

905 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 22:53:37 ]
あ、いやなんかごめん

906 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 23:02:42 ]
>>902
現在無いので
httpを簡単に扱えるライブラリ(これはいろいろある)を探して
monazillaあたりで、書き込みの方法を調べるのが割と楽かと

907 名前:デフォルトの名無しさん mailto:sage [2010/07/11(日) 23:38:07 ]
>>906
嘘でしたか
ありがとうございます

908 名前:デフォルトの名無しさん mailto:sage [2010/07/11(日) 23:47:57 ]
>>907
作ったら公開してよ。

909 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:29:06 ]
>>907
いや嘘じゃねーよ。socke.h使えば2ch書き込みだってできるっつのふざけんな。

910 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:33:26 ]
2ch書き込み用のライブラリか?って言われると確実に嘘だけどな

911 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 12:06:27 ]
dolib

912 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 13:24:15 ]
2chの書き込みなど簡単だろ。スクリプト言語のブラウザ動作真似るやつ使え。
UWSCなら手動操作をスクリプト化出来るし。

913 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 13:25:11 ]
それよりも、P2P掲示板作ってくれよ。
そしたら、規制掛からないし。いいよ。



914 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 18:37:44 ]
FreeNet






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef