08/04/05 23:50:06
επιστημη ってこんなところにも出没するんだな
427:デフォルトの名無しさん
08/04/05 23:54:19
>>425
std::advance
というか、+ は定義されているはずなのだが、
どんなコンパイラ使ってるの?
428:デフォルトの名無しさん
08/04/05 23:54:52
>>425
コンパイラ何使ってるの?
vector のイテレータはランダムアクセスイテレータのはずだから、
コンパイラの実装がおかしいだろ、それは。
429:デフォルトの名無しさん
08/04/05 23:55:08
>>425
vector<int>::iterator it= &vec[vec.size()/2];
みたいな感じでできないか?
430:デフォルトの名無しさん
08/04/06 00:01:24
>>429 それはダメ。ポインタとごっちゃになってる。
431:デフォルトの名無しさん
08/04/06 00:08:31
PCSX2というソフトをコンパイルしたいんですがやり方がわかりません。
プログラムについての知識0です。
勉強したいとかではなくこのソフトがほしいだけです。
Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。
サルにも判るように教えてくれる方がいれば幸いです。
URLリンク(www.pcsx2.net)
URLリンク(pcsx2.svn.sourceforge.net)
432:425
08/04/06 00:10:23
すみません。できました。どこかで間違った思い込みしてたみたいです。
433:デフォルトの名無しさん
08/04/06 00:23:40
>>430
ランダムアクセスイテレータはポインタ互換だと勘違いしてた
そういう実装が多いだけか
434:デフォルトの名無しさん
08/04/06 00:25:07
>>433
使用可能な演算子はポインタと同じだが、
ポインタとの間で相互変換することはできない。
435:デフォルトの名無しさん
08/04/06 00:26:14
ただし、ポインタもランダムアクセスイテレータの一種だけどね。
436:デフォルトの名無しさん
08/04/06 01:01:40
>>424
プロキシクラスを返す。
class A
{
public:
class Proxy
{
public:
double operator[](int y);
};
Proxy operator[](int x);
};
437:デフォルトの名無しさん
08/04/06 01:06:20
ポインタ返せるならそれでいいと思う。
範囲チェックしたければ何かクラス返すことになると思うけど。
438:デフォルトの名無しさん
08/04/06 10:48:56
>>431
スレ違いだということ、サルでも分かるかな?
439:411
08/04/06 12:00:53
>412
回答ありがとうございます。
遅くなる原因がわかり、勉強になりました。
ありがとうございました。
440:デフォルトの名無しさん
08/04/06 12:57:53
>>436-437
ありがとうございます。
以下のような実装でいいですか? (あまりスッキリしてないような、、)
class test {
public:
test(int arg_size);
struct Proxy {
Proxy(int arg_size) : size(arg_size) {
vec.assign(size, 0.0);
}
double &operator[](int y) {
return vec[y];
}
std::vector<double> vec;
int size;
};
Proxy &operator[](int x) {
return proc_vec[x];
}
std::vector<Proxy> proc_vec;
int size;
};
441:デフォルトの名無しさん
08/04/06 13:36:20
ていうかよっぽどの理由が無いなら()演算子のでいいじゃん
442:デフォルトの名無しさん
08/04/06 14:08:59
クラスの中身の先頭にusing namespace ~;は書けないの?
443:デフォルトの名無しさん
08/04/06 14:11:20
>>441
なるほど、たしかに全然すっきり書けますね。
メンテもしやすそうだし、こっちにします。
ありがとうございます。
class Matrix {
public:
Matrix(int arg_size) : size(arg_size) {
vec.assign(size, std::vector<double>(size));
}
std::vector< std::vector<double> > vec;
int size;
double &operator()(int x, int y) {
return vec[x][y];
}
};
444:デフォルトの名無しさん
08/04/06 14:18:34
>>443
440でもそうだったけど、size変数って不要じゃね?
445:デフォルトの名無しさん
08/04/06 15:13:16
>>443
更にで何だけど、要素数のパターンが少なくて、定数でしか使わないなら要素数テンプレートにしちゃうと
ベクターも使わずに済むが・・・
用途分からんからしらね
446:デフォルトの名無しさん
08/04/06 15:15:45
エラー 1 error LNK2001: 外部シンボル ""private: static int Forms::Application::nCmdShow" (?nCmdShow@Application@Forms@@0HA)" は未解決です。 main.obj
ってどういう意味のエラーですか?
447:デフォルトの名無しさん
08/04/06 15:21:22
>>446
宣言だけされてて関数が定義されていない。
448:デフォルトの名無しさん
08/04/06 15:34:25
>>445
どうやるんですか?
要素は、二次元ベクトルなんですが、1000×1000要素くらいです。
449:デフォルトの名無しさん
08/04/06 15:36:35
>>446
プロジェクトのリンクするライブラリの設定で
必要な関数入ったLIBファイルを設定しわすれてるんじゃない
450:デフォルトの名無しさん
08/04/06 15:37:08
>>444
その通りですね。
size変数は消します。
451:デフォルトの名無しさん
08/04/06 15:46:43
>>448
vectorの要素数って変わるの?
452:デフォルトの名無しさん
08/04/06 16:25:26
>>448
横レスだが、こういうことだと思う。
template<int size_x, int size_y> class Matrix {
public:
double& operator()(int x, int y) { return v_[x][y]; }
private:
double v_[size_x][size_y];
};
1000×1000は大きいので、スタックには置けないけど。
453:デフォルトの名無しさん
08/04/06 16:43:03
よくみるLPクラス名って、そのクラスのポインタ型って事?
454:デフォルトの名無しさん
08/04/06 17:00:20
>>453 そういう名前付けの規則が昔はやってたんだよ。
455:デフォルトの名無しさん
08/04/06 17:02:13
ある天気予報サイトの三重県の天気情報の文字列だけを抽出して自分のホームページに乗せるプログラムを書きたいのですが、どういったことを勉強すれば良いのかご教示願えないでしょうか。宜しくお願いします。
456:デフォルトの名無しさん
08/04/06 17:13:54
>>455
・サイトにアクセスしてページを入手する
・ページを加工する
・自サイトに貼り付ける
WebProg板へどうぞ。
457:デフォルトの名無しさん
08/04/06 17:32:48
エラー 1 error C2143: 構文エラー : ';' が 'Forms::Application::frm' の前にありません。 application.cpp 7
エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 4 error C2371: 'frm' : 再定義されています。異なる基本型です。 application.cpp 7
>>449
>>447
解決しました。
が、今度はこんなエラーが。
定義はしたんですが、今度は定義した場所でエラー吐くようになりました。
458:デフォルトの名無しさん
08/04/06 17:52:08
>>457
>>54-
459:デフォルトの名無しさん
08/04/06 19:44:31
ありがとうございました。
名前空間をちゃんと指定してなかったのが原因でした。
460:デフォルトの名無しさん
08/04/07 02:21:47
ヘッダに定義とか書けちゃうんだけど、
分けた方がええの?
分ける理由ってなんですか?
461:デフォルトの名無しさん
08/04/07 02:41:53
>>460
定義のほうをあらかじめコンパイルしてオブジェクトにしとける
小さいなら定義も一緒でいいだろ
boostとかにもそういうのあるよ
462:デフォルトの名無しさん
08/04/07 02:46:51
>>460
プログラムサイズが増えたり重複オブジェクトができたりコンパイルが通らなかったりする
463:デフォルトの名無しさん
08/04/07 02:49:17
ヘッダに関数書くならstaticつけるかファンクタにするかテンプレートにしとけよ。
464:デフォルトの名無しさん
08/04/07 02:54:18
こういう質問をする人のレベルだと、一番掴みやすいのはコンパイル時間の問題かなぁ。
>>460
たとえば、計10万行くらいあるソースファイル群のすべてが
直接or間接的にhoge.hppというヘッダファイルをincludeしているとして、
hoge.hppが実装まで全部書いてあるモノだったとすると、
その実装部分をほんの1行変更しただけで、10万行のソースファイル群が
すべて再コンパイルされることになる。
定義を別ファイルにしておけば、変更したときに再コンパイルするのはそのファイルだけで済む。
465:デフォルトの名無しさん
08/04/07 04:53:14
LinuxにおいてHDDの容量を取得したいのですがどの様にすればよいのでしょうか?
466:デフォルトの名無しさん
08/04/07 04:59:01
ただのグローバル変数とstaticをつけたグローバル変数って同違うんですか?
467:デフォルトの名無しさん
08/04/07 06:43:59
>>465
Linux板へどうぞ。ulimitでできるでしょ。
>>466
前者は文字通りGlobal。後者はファイルスコープなので違う翻訳単位からは見えない。
どちらにしても、可能な限り使わないに越したことはない。
468:デフォルトの名無しさん
08/04/07 07:14:53
>>464
>>463
>>462
>>461
ありがとう。
なんとなくわかった。
469:デフォルトの名無しさん
08/04/07 07:45:15
>>463
ヘッダに関数書くときに、static付けたり、ファンクタにしたり、テンプレートにしたりすると、
どういう点でいいですか?全然考えてませんでした。
470:デフォルトの名無しさん
08/04/07 07:59:53
関数が複数実体化されることを抑制できる。
471:デフォルトの名無しさん
08/04/07 12:23:30
★ 今世紀最大の大祭り!聖火を巡る障害物リレー 日本イベント来たる! ★
【目的】
街中をオニが駆け巡ります。
オニは聖火を持って移動します。これを消すのが目的です。
ただし、今回は参加者が多いため難易度がはね上がりました。
今回のみ、オニは壁役に守られながら走ります。
壁役を突破して聖火を消せばゲームクリアとなります。
【ルール】
~勝ち~
オニが持っている聖火を消すとその時点でゲームクリアとなります。
~負け~
オニが若里公園まで逃げ切るとその時点でゲームオーバーとなります。
【日時 】 2008年4月26日(土)8:30スタート
【場所 】 長野県長野市
【ルート地図】 URLリンク(www.city.nagano.nagano.jp)
【詳細情報 】 URLリンク(www.joc.or.jp)
-------------------------------------------------------------
イギリスで行われたイベントの様子
URLリンク(jp.youtube.com)
フランスで行われたイベントの様子(1分30秒から)
URLリンク(jp.youtube.com)
『2ch大規模OFF会場』
スレリンク(offmatrix板)
スレリンク(offmatrix板)
『各国の競技結果』
URLリンク(ja.uncyclopedia.info)
472:デフォルトの名無しさん
08/04/07 18:43:10
四則演算ってさ、
char でも int でも double でもしてくれるが、
それってコンパイル時に適切にマシン語に変換してくれてるんですか?
CPUが持ってる算術演算の機能を使えるように
置き換えてるのであってCPUが int なのか char なのか判断して
処理してるわけではないですよね?
473:デフォルトの名無しさん
08/04/07 18:51:06
>>472
そうだよ
ないです
474:デフォルトの名無しさん
08/04/07 19:12:35
ただし格上げされて計算されるので種別はそんなに多くないです。
475:デフォルトの名無しさん
08/04/07 20:03:56
格上げ、というか汎整数拡張あたりじゃないのかな
476:デフォルトの名無しさん
08/04/07 22:26:22
とりあえず宿題スレの方で提出が終わったので、
自分なりに作ろうと思っているのですが、いきなり行き詰ってしまいました;
整数の場合8桁、負数の場合9桁、エラー仕様など、問題が山積みですが、
どうかご教授お願いします。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
477:476
08/04/07 22:28:20
#define buffersize 10ですね;
478:デフォルトの名無しさん
08/04/07 22:41:06
>>476
何がしたいんだ?宿題をといて自分なりに課題を拡張して勉強しようとしたのか?
そのテキストファイルを見せられても、課題を丸投げされているようにしか見えないが。
とりあえずバッファオーバーフローしてたり、いろいろまずいぞ。
479:デフォルトの名無しさん
08/04/08 10:55:17
URLリンク(www.nicovideo.jp)
この動画でやっている、画像ファイルをテキスト(AA)に変換は
どのようにやっているのですか?
480:デフォルトの名無しさん
08/04/08 11:03:12
動画にコード出てるじゃないか……
481:デフォルトの名無しさん
08/04/08 11:08:11
画像の輪郭抽出→予めこのパターンにはこの文字を使うというデータを登録しておく→
画像の上から順にパターン解析と文字割り当てを行う。
って感じしか思い浮かばん
482:デフォルトの名無しさん
08/04/08 11:08:35
>>480
初心者なもので・・・
画像を読み込んで、テキストに変換してさらにそれの色を判別してつけるのは
どの辺のコードを見たら良いのでしょうか?
483:デフォルトの名無しさん
08/04/08 11:19:20
今動画見てきたぜ。想像してたのと違ったぜ。とりあえずBMPを配列にするとこからはじめたら?
BMPのフォーマット↓凄く簡単だからすぐできるはず。
URLリンク(www.kk.iij4u.or.jp)
後は色に合わせて<font color="色">■</font>をひたすら出力すればできるだろ。
中級入門くらいじゃね?動かしたいならJavaScriptの解説かじればおk
484:デフォルトの名無しさん
08/04/08 12:38:37
>>476
とりあえず、どのあたりで困ってるのかな。?
mainに全部書くのではなく関数を作ってみよう。
引数をまとめれば、何をするべきかわかるんじゃないかな。
485:デフォルトの名無しさん
08/04/08 12:43:09
昔、先輩が「コンストラクタではnew使うな」と言っていたのを思い出したのだけど、
これってどういう意図なのでしょう。
一般的なルールなのか、特定の状況で有効な話だったのか……。
486:デフォルトの名無しさん
08/04/08 12:47:03
>>485
コンストラクタ内で例外が発生すると、デストラクタは呼ばれない (仕様)
→ new でコケたらリーク!
じゃね?
コンストラクタ内の例外は漏れなくコンストラクタ内で処置すれば無問題。
487:デフォルトの名無しさん
08/04/08 13:04:20
>>479
お絵かきとかでもあるネタだけど、むしろどうやって動画にしてる
のかの方が気になる。コーディング中ずっと録画してあとで編集
してるんだろうが…根性あるなw
488:デフォルトの名無しさん
08/04/08 13:17:33
コーディング中のキータイプを記録、編集
↓
動画を取りながら記録したキータイプをマクロで動かす
↓
(`゚'Д`゚')
489:デフォルトの名無しさん
08/04/08 13:24:03
>>479
画像を読み込んで表示するところから始めたらいい
結構親切っぽいから彼のサイトの掲示板で聞いてみれば
講座の方はかなり酷いスパゲティコードだからお勧めしないw
490:デフォルトの名無しさん
08/04/08 16:01:19
この講座、どんな感じ?
URLリンク(weblearningplaza.jst.go.jp)
491:デフォルトの名無しさん
08/04/08 18:21:58
cinからdoubleを1つまたは複数入力させます。入力されたのが1個なのか、複数なのか判定したいのですが、
以下のコードでよいですか?Macだとうごくのですが、windowsでもこれでいいのかわかりません。
double a;
std::cin >> a;
if (std::cin.peek() == '\n') {
// 数字は一個だった
}
else {
// 一個じゃなかった。
}
492:デフォルトの名無しさん
08/04/08 18:48:09
>>491
やってみりゃいいじゃない。
493:デフォルトの名無しさん
08/04/08 19:06:50
>>492
ありがとうございます。今手元にwindowsがないのです。
また、自分のところのwindowsでやってみて動いても、ほかの人のwindowsでは
どうなるかわからないし…
その、規格的に入力の文字列末判定はこれでいいのかどうか、知り痛いです。
494:デフォルトの名無しさん
08/04/08 19:10:04
>>485
VC8で大量にメモリの確保しているとコンストラクタの中のnewで「メモリが不足しています。」とエラーがでる。
理由が分からずallocにしたら問題なかった。
というか今も原因が掴みきれない件。
495:デフォルトの名無しさん
08/04/08 19:20:20
使う型がある程度限定できるテンプレートだったら
MyTemplate<型名>をtypedefしてしまえば良いような気がするけど
これってありなんですかね?
496:デフォルトの名無しさん
08/04/08 19:38:16
まさにstringとwstring
497:デフォルトの名無しさん
08/04/08 20:08:28
>>493
つボラギノール
498:デフォルトの名無しさん
08/04/08 21:56:33
>>495
あり。
499:デフォルトの名無しさん
08/04/08 21:59:56
ありあり。
500:デフォルトの名無しさん
08/04/08 22:04:32
ありありありあり。
501:デフォルトの名無しさん
08/04/08 22:05:12
ありが十匹で
502:デフォルトの名無しさん
08/04/08 22:14:19
さよならだ
503:デフォルトの名無しさん
08/04/08 22:23:50
アリーヴェデルチ
504:476
08/04/08 22:28:39
>>478様
ですよね、失礼しました;
>>484様
エラー仕様を作ろうとしたのですが、
【整数の場合最大8桁までを有効とし、9桁以降を無視する。
負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。】とあり、
【『-』のみ、または改行のみ入力されたらエラーメッセージを表示し、終了】
というのもあるので、
エラーとしては if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n')
みたいなのを使えばいいのかなぁ、程度で考えてるのですが、
どこに入れればいいのかなどイマイチ判らないのです;
505:デフォルトの名無しさん
08/04/08 22:34:19
ひょっとしてその数え方だと、「-1」は2桁なのか?
506:476
08/04/08 22:53:28
>>505
私的にはそういう風に考えてます;
507:デフォルトの名無しさん
08/04/08 22:54:05
>>486
なるほどー例外ですか。それは思い浮かばなかった。
newしたときの初期化の処理が無駄だったりするのかとか当時考えたのを思い出した。
508:デフォルトの名無しさん
08/04/08 23:02:41
>>504
whileを抜けて
>if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n')
の場合にreturnで終わればOK
returnの前にprintfで適当にエラー出せば目的のものになるだろ。
>どこに入れればいいのかなどイマイチ判らないのです;
どこに入れてダメだったんだ?
509:デフォルトの名無しさん
08/04/08 23:09:47
classのなかにnamespaceは作れますか?
510:デフォルトの名無しさん
08/04/08 23:19:28
muri
511:デフォルトの名無しさん
08/04/09 03:14:20
質問なのですが、(VC++ 2008 EE を使用しています。)
以下のコード。
COORD coord;
HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleStdOut, coord);
は、<windows.h>をインクルードして使える、というのは判断できますが、
これはwindowsプログラミングなのでしょうか?
WinMain()関数も無いし、DOSで表示されるのですが、
こういったコードの総称は何と呼ばれているのですか?
説明下手で申し訳ないです。
512:デフォルトの名無しさん
08/04/09 03:17:27
WindowsのAPIに依存してるならどう考えてもWindowsプログラミングだと思うが…。
513:デフォルトの名無しさん
08/04/09 03:39:45
WindowSystem(≒GUI)プログラミングではないが、
(MS-)Windowsプログラミングだな。
ついでに言えば、コンソールウィンドウはDOSではない。
514:デフォルトの名無しさん
08/04/09 04:02:03
>>512
>>513
ありがとうございます。
この「COORD coord;」や「HANDLE」の意味が解らず、
じゃあ総称が判ればネットで検索できる、と思い至ったのですが、
ネットを見ても、C言語による(MS-)Windowsプログラミングが掲載されていないんですよね。
はぁ。。。
515:デフォルトの名無しさん
08/04/09 05:19:59
>>514
日本語訳は無いけどMSDNに載ってるよ。
516:Alexander The Great WAS ALBANIAN, the PROOF by Flamuri
08/04/09 06:53:32
URLリンク(www.youtube.com)
517:デフォルトの名無しさん
08/04/09 07:30:25
>>507
ちゃんと delete すれば問題ない。
例外を一旦コンストラクタ内でキャッチして delete するのもいいが、
スマートポインタに入れておけばあとはデストラクタが勝手に何とかしてくれる。
コンストラクタ内で例外が発生した場合に呼ばれないデストラクタは
構築中のオブジェクトのデストラクタだけだからね。
既に構築されたオブジェクトのデストラクタは全て呼ばれる。
例えば基底クラスのデストラクタとか
構築されたメンバ変数のデストラクタとかは全て呼ばれる。
new に関して気をつける必要があるのは事実だけど、
使っていけないってことはあり得ない。
まあ、初心者は使わない方が無難ってこと程度の話じゃないのかな。
518:デフォルトの名無しさん
08/04/09 09:01:29
いいえ、newを生で使っている人はちゃんとスキンをつけるようにしてください。
519:デフォルトの名無しさん
08/04/09 09:26:43
newに限らず例外を投げる可能性のある関数をコンストラクタ内で
呼び出すときはstack unwindを考えて対応する。
520:デフォルトの名無しさん
08/04/09 09:32:36
コンストラクタ内でnewが例外吐いたのをキャッチしたとして、
そのあと何をすれば良いのですか?
521:デフォルトの名無しさん
08/04/09 09:38:26
>>520
ケースバイケース
スワップが頻発してるなどメモリ不足でシステムがヤバイ状態なら
終了してシステム全体のシステムの再考。
そのエラーを無視してでも少しでも長く生き続ける必要が条件なら
ログにでも吐いて続行。
522:デフォルトの名無しさん
08/04/09 11:47:43
VC++2008EE
ListBoxの1行削除ができたので、今度は削除前に
メッセージボックスを出して見ようとしたのですが、
エラーがものすごい数出てしまいました。
System::Windows::Forms::DialogResult result;
result = MessageBox::Show("削除しますか?","DELETE CHECK",MessageBoxButtons::YesNo);
Debug::WriteLine(result);
if(result != System::Windows::Forms::DialogResult::Yes)){
return;
}
if文全体を削除すると問題なく動作し、
また、出力ではYes,No確認できるので、
if文のSystem::Windows::Forms::DialogResult::Yesが、
問題なのかと思い、"Yes"とかにしてみたのですがやはりエラーが出てしまいます。
これはなぜエラーが出てしまうのでしょうか
523:デフォルトの名無しさん
08/04/09 11:56:41
>>519
それコンストラクタ関係ないだろ。
524:デフォルトの名無しさん
08/04/09 12:00:08
>>522
それ.netじゃん
AfxMessageBoxかAPIのMessageBox使うべし
525:デフォルトの名無しさん
08/04/09 12:03:48
>>520
コンストラクタ内で catch なんて書かないでいいように RAII を徹底したほうがいい。
526:デフォルトの名無しさん
08/04/09 12:14:47
>>524
ひと目でわかる Microsoft Visual C++ 2008 アプリケーション開発入門
という本を読みながらやっていて、
本書はC++/CLIで書いてある。とあるので、たぶん.netというやつだとおもいます。
この本の通りにやるとエラーが出てしまい、
エラーの内容見てもよく分からなくて、
いろいろ試してたのですが、結局原因が分からず聞いてみました。
この本で使っているMessageBoxにはなにか問題があったりするんでしょうか
527:デフォルトの名無しさん
08/04/09 12:21:41
>>526
C++/CLIてのはC++でなんとか.net使いましょうよ・・・っていう仕様
.netだけならC#の方がいいし、速度的にC++ならC++/CLIしないでMFCかAPI使った方がいい
528:522
08/04/09 12:30:18
申し訳ありません。もの凄く下らないミスでした。
if(result != System::Windows::Forms::DialogResult::Yes)){
かっこが一つ多かったです・・・スレ汚しすみませんでした。
>>527
うう、本まで買って気合い入れてしまったため再スタートは辛いです。
とりあえずこの道進んで、あとから徐々に方向転換してみます。
ありがとうございました。
529:デフォルトの名無しさん
08/04/09 12:33:15
>>528
C++/CLIなら↓の方で聞いた方がいいよ
C++/CLI part3
スレリンク(tech板)
530:デフォルトの名無しさん
08/04/09 15:29:32
>>528
甘いな。俺は最初どの本買ったらいいかわかんなくて結局3冊目まで買ったぞ
531:デフォルトの名無しさん
08/04/09 15:36:05
MFCってまだ使われてるのか?
532:デフォルトの名無しさん
08/04/09 15:44:23
>>531
きみのPCのMFC関連のDLL等を全て削除して使用してみればきみの環境での依存度が分かる
533:デフォルトの名無しさん
08/04/09 15:46:40
>>532
滑ってるよ
534:デフォルトの名無しさん
08/04/09 15:52:50
マジレス
535:デフォルトの名無しさん
08/04/09 17:07:16
MFC関連のDLL、スタティックリンクするから無くても動いちゃうよ
(俺のアプリは)
536:デフォルトの名無しさん
08/04/09 17:14:37
CString m_combo = "notepad.exe";
WinExec((LPCSTR)(LPCTSTR)m_combo,SW_SHOW);
これアプリが起動しないんですけどなんでですか
537:デフォルトの名無しさん
08/04/09 17:23:00
LPCTSTRをLPCSTRに変換しているのが限り無く怪しい。
LPCTSTRを引数に取るShellExecuteか何かを使え。
538:デフォルトの名無しさん
08/04/09 17:30:01
WinExecが好きなんですけど変換は不可能ですか?
539:デフォルトの名無しさん
08/04/09 17:33:34
なら(LPCSTR)(CStringA)m_comboでどうだ。
あと、引数の少なさなら<tchar.h>の_tsystemがいいぞ。
540:デフォルトの名無しさん
08/04/09 17:35:33
っていうかWinExecはdeprecatedな扱いのAPIのような気がする。
541:デフォルトの名無しさん
08/04/09 17:37:24
struct hoge_a{
int a;
int b;
};
struct hoge_b : public a{
int c;
int d;
};
としたとき、hoge_aのメンバのメモリ上の並び順はabとなるのは保証(規定)されていると
どこかで見た記憶があるのですが、hoge_bの場合、abcdとなることは保証されるのでしょうか?
542:デフォルトの名無しさん
08/04/09 17:54:09
>>539
動いたwお前すごいわ
どこにも乗ってなかったぞこんなの
543:デフォルトの名無しさん
08/04/09 18:27:43
srandのseedが同じ場合、マシンやOSが変わっても同じ乱数を発生させることができるのでしょうか?
544:デフォルトの名無しさん
08/04/09 18:32:25
>>543
No
545:デフォルトの名無しさん
08/04/09 18:42:27
そうすると何に依存するのでしょうか?
コンパイラですか?それともOSですか?
AMDとintelのようにCPUが変わっただけでもダメですか?
546:デフォルトの名無しさん
08/04/09 18:44:58
libcの実装次第?
時間と空間を使えばかなりランダムになりそうだけどなぁ。
547:デフォルトの名無しさん
08/04/09 19:10:37
>>543
移植性を考えるなら同じ種で同じ乱数列の出力を保証するにはライブラリに頼らず乱数発生器も実装してしまう
548:デフォルトの名無しさん
08/04/09 19:46:10
C++について質問なのですが、
オブジェクトを作らずにメンバ関数を呼び出すことは可能でしょうか。
549:デフォルトの名無しさん
08/04/09 19:49:19
静的メンバ関数なら。
550:デフォルトの名無しさん
08/04/09 19:54:24
>>548
できる。
struct a{ void f(){} };
reinterpret_cast<a*>(NULL)->f();
551:デフォルトの名無しさん
08/04/09 20:06:20
なるほど。勉強になりました。
レスありがとうございました。
#include <stdio.h>
class A
{
public:
static A* make_obj(void);
void my_puts(void){ puts("Hello\n"); }
};
A* A::make_obj(void){
A* a = new A;
return a;
}
int main()
{
A* a = A::make_obj();
a->my_puts();
return 0;
}
552:デフォルトの名無しさん
08/04/09 20:12:24
>>550
やめなさい
553:デフォルトの名無しさん
08/04/09 20:36:54
>>551
わかってると思うけど生ポではなくスマポに入れて返しとけよ
554:デフォルトの名無しさん
08/04/09 21:09:35
using namespace ~;
は取り消せますか?
555:デフォルトの名無しさん
08/04/09 21:16:28
永遠に取り消す事が出来ない呪いです。
using は計画的に。
556:デフォルトの名無しさん
08/04/09 21:24:07
namespaceをusingすると、そのnamespace内のusingまで見えてしまうのには泣く。意味ねーじゃん
557:デフォルトの名無しさん
08/04/09 21:27:35
だからヘッダにusing書いちゃ駄目ってママ言ったでしょ
558:デフォルトの名無しさん
08/04/09 21:30:57
>>550
staticメンバ関数が無い時代の苦肉の策ですなあ。
ただ非静的メンバーは参照できない。
559:デフォルトの名無しさん
08/04/09 21:31:50
turboPascalのusing見たいな使い方したかったのに。
560:デフォルトの名無しさん
08/04/10 00:22:01
VC++ 2008 EE でWindowsアプリケーションを作成したいのですが、
そのまま<windows.h>をインクルードしてもエラー表示なので、
どのような設定が必要なんですか?
561:デフォルトの名無しさん
08/04/10 00:24:06
>>548
なんのためのメンバ関数なんだか。
562:デフォルトの名無しさん
08/04/10 00:33:29
>>561
いや、他人の書いたコードを解読してるんだ。。
563:デフォルトの名無しさん
08/04/10 00:39:03
>>560
[ファイル]-[追加]-[新しいプロジェクト]
[Visual C++]-[Win32]-[Win32プロジェクト]-[プロジェクト名]-[OK]
[次へ]-[Windowsアプリケーション]-[■空のプロジェクト]-[完了]
[ソースファイル]-[追加]-[新しい項目]
[Visual C++]-[コード]-[C++ファイル]-[ファイル名]-[追加]
564:デフォルトの名無しさん
08/04/10 01:46:59
>>563
ありがとうございます。3行目まではうまく設定できたのですが、
4行目の「ソースファイル」?が何を指しているのかわからず、
そのまま5行目の作成を行いました。
結果はやはりビルドエラーです。
コードは以下です。
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
/* アプリケーションエントリーポイント */
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR CmdLine,
int CmdShow)
{
//処理
return ;
}
/* ウインドウプロシージャ */
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
//処理
}
return DefWindowProc(hwnd,message,wparam,lparam);
}
565:デフォルトの名無しさん
08/04/10 01:50:01
エラーの内容は?
566:デフォルトの名無しさん
08/04/10 01:54:31
ファーストへの悪送球。
567:デフォルトの名無しさん
08/04/10 01:54:45
1>------ ビルド開始: プロジェクト: C800, 構成: Debug Win32 ------
1>コンパイルしています...
1>MJ_1.cpp
1>.\MJ_1.cpp(26) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\MJ_1.cpp(41) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>C800.cpp
1>.\C800.cpp(28) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\C800.cpp(43) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>コードを生成中...
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\C800\Debug\BuildLog.htm" に保存されました。
1>C800 - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
です。
568:デフォルトの名無しさん
08/04/10 02:02:15
>>567
なぜコンパイルエラーの部分を省略する。
ググればいろいろ見つかる。
URLリンク(www.google.co.jp)
569:デフォルトの名無しさん
08/04/10 02:21:14
>>568
ありがとうございます。
文字変換だったのですね。
しかしググっても出てこないので最後に嘆きます。
1>------ ビルド開始: プロジェクト: GAME, 構成: Debug Win32 ------
1>マニフェストを埋め込んでいます...
1>.\Debug\GAME.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK
1>~[
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\GAME\Debug\BuildLog.htm" に保存されました。
1>GAME - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
なるエラーが出るのですが、まったく意味不明です。
570:569
08/04/10 18:46:06
申し訳ないです。
自己解決しました。
ありがとうございます。
571:デフォルトの名無しさん
08/04/10 21:45:49
VC++2005で、ADOでSQLSERVER2005に接続して、binary型のフィールドに
1000byte程のバイナリデータを保存したいのですが、
long型の配列にデータをmemcpyし、それをrs->Updateしようとすると、
コンパイルで「bool値に変換します」というような警告がでて、データを転送できません。
バイナリデータを転送するにはどのようにすればいいのでしょうか?
(配列には正常にデータがコピーされていることはファイル出力で確認できております)
572:デフォルトの名無しさん
08/04/11 00:26:01
>>571
URLリンク(support.microsoft.com)
573:デフォルトの名無しさん
08/04/11 06:15:26
vector〈基底クラス*〉に数種類の派生クラスをプッシュバックしてオーバーライドした関数を実行するようなことはできますか?
574:デフォルトの名無しさん
08/04/11 06:18:09
>>573
virtualなメンバ関数を実行ということなら、可能です。
575:デフォルトの名無しさん
08/04/11 06:33:22
もちろん仮想関数にしてあります
&の付け忘れでした
解決できましたありがとうございます
576:デフォルトの名無しさん
08/04/11 06:38:48
>>573=>>574=>>575
577:デフォルトの名無しさん
08/04/11 06:50:20
573=574=575=576
578:デフォルトの名無しさん
08/04/11 07:17:15
>>575
メモリリークに気をつけような。
boost::ptr_vector の使用も検討してみるといい。
579:デフォルトの名無しさん
08/04/11 12:34:50
動的に二次元配列を確保するにはどうすればよいですか?
int x=10; int y=10;
double a[x][y];
という風に書くのは、xyが小さい間は出来たのですが、newで確保しようとすると
yを変数にできません。vectorを使わずに上記のようなことができるでしょうか?
よろしくお願いします。
580:デフォルトの名無しさん
08/04/11 12:37:06
double **a;
*a = new double[x]
for( int i = 0; i < x; ++i )
a[x] = new double[y]
こんなん
581:デフォルトの名無しさん
08/04/11 12:47:33
boost::multi_arrayオススメ。
582:デフォルトの名無しさん
08/04/11 12:52:43
>>580
ありがとうございます。
確保した二次元配列をほかの関数に渡すにはどうすればよいですか?
あと、boost::multi_arrayは速いですか?
今書いているのは、std::vectorもあまり知らない人に見せるためなので、
boostなんてとてもだめです。
583:デフォルトの名無しさん
08/04/11 12:57:05
アセンブリ言語のコンパイラのCソースプログラムを持っているのですが、
アセンブリ言語をコンパイルするには、このソースをコンパイルしてから
どうすればいいのでしょうか?
584:デフォルトの名無しさん
08/04/11 12:58:11
void func( int **a );
これでわたせるんじゃね、多分
585:デフォルトの名無しさん
08/04/11 13:06:03
>>582
そういう初心者には、素直に一次元配列を仮想化して使う方がいい。
こんな関数でも用意すればアクセスするのも割と簡単だ。
static unsigned offset(unsigned x, unsigned y, unsigned w)
{
return x + y * w;
}
勿論、メモリ確保はこうなる。
double * a = new double[w * h];
あー、ついでに言えば>580はバグだらけだから要注意で。
つーか、>584もかすだわ。
586:デフォルトの名無しさん
08/04/11 13:06:38
>>583
Cソースをコンパイルしてできた実行ファイルを実行してアセンブルすれ
ばいいのでは。
587:デフォルトの名無しさん
08/04/11 13:19:33
>アセンブリ言語のコンパイラ
有り得ない間違いだな。
588:デフォルトの名無しさん
08/04/11 13:29:33
>>580
これは酷い。
589:デフォルトの名無しさん
08/04/11 13:34:19
mbscmp
wcscmp
などの違いがわからない・・・・
あと、lstrcmp とか strcmp みたいなのもあったような気がするけど気のせい?
誰か、これらの関数の違いについて分かり易く教えてください。
590:デフォルトの名無しさん
08/04/11 13:40:56
文字として wchar_t を使うとき -> wcscmp
文字として char で mbcs を使うとき mbscmp
文字として char で sbcs を使うとき strcmp
文字として TCHAR を使うとき lstrcmp
ドキュメント読まずにまず2chで聞くという態度では、わからなくて当たり前。
591:デフォルトの名無しさん
08/04/11 13:49:11
>>590
すみません。それがいまいちよくわからないんです。
charを使うときとか、tcharを使うときと言われても抽象的すぎて???
具体的に、どういう処理をするときにmbscmp や strcmp などを使い分けるのでしょうか?
同じ文字列比較でも、mbscmp を使っていたり、 strcmp を使っていたりと、訳が分りません。
592:デフォルトの名無しさん
08/04/11 13:52:17
>>587
確かに…ご指摘ありがとうございます
アセンブリ言語を実行するものの意味で使いました
593:デフォルトの名無しさん
08/04/11 13:52:50
>>591
それは抽象的だからわからないんじゃなくて、勉強しないからわからないのです。
mbcs と sbcs の違いなんか、Google で 「mbcs と sbcs の違い」を(カッコははずして)
検索すればいくつもそれらしい説明のページが出てくるのです。
もし手抜きじゃなくてホントのホントに何もしないで知識が身に付くと思ってるのなら、
そもそもバカなので勉強しても無駄なので止めるべきです。
594:デフォルトの名無しさん
08/04/11 14:04:17
>>592
それは普通、アセンブラと呼ばれる。
いや、厳密に言えば「アセンブリ言語を翻訳するもの」だが。
595:デフォルトの名無しさん
08/04/11 14:05:02
>>593
なんか嫌なことでもあったのか?
596:デフォルトの名無しさん
08/04/11 14:05:03
なんとなく分ったような分らないような・・・・
同じ英数字からなる文字列比較でもプログラムによって使っている関数が違うのは
書き手(プログラマー)の意識の違いによる?
さらにワイド文字とマルチバイト文字の違いがよく分らん。。。。
出直してきます。スレ汚してすみません。
597:デフォルトの名無しさん
08/04/11 14:06:53
すまん
*a = new double[x]
じゃなくて
a = new double*[x]
だ
598:デフォルトの名無しさん
08/04/11 14:20:42
>>597
それだけじゃねーだろ。
599:デフォルトの名無しさん
08/04/11 15:19:15
>>595
593じゃないけど、あえて言うなら「投げっぱなしの馬鹿を見てしまったこと」が
「嫌なこと」なんだろう。
600:デフォルトの名無しさん
08/04/11 20:21:49
deleteで落ちちゃうんだけど、原因わかりません><
このコードで落ちます・・・。
int i;
char *lpary[4];
for (i = 0; i < 4; i++){
lpary[i] = new char[256];
}
for (i = 0; i < 4; i++){
delete [] lpary[i];
}
誰か教えてください。
601:デフォルトの名無しさん
08/04/11 20:23:53
落ちる要素は特に見当たらないが・・・。
多分、他で色々やってる部分でマズいことやってんじゃないかと。
602:デフォルトの名無しさん
08/04/11 20:24:46
for (i = 0; i < 4; i++){
delete lpary[i]
}
delete[] lpary;
603:デフォルトの名無しさん
08/04/11 20:25:53
>>602
おいおい^^;
604:デフォルトの名無しさん
08/04/11 20:26:53
よく見てなかった
すまん忘れてくれ
605:600
08/04/11 20:29:44
すいません。原因わかりました。
newとdeleteの間でやってる処理で確保したポインタに別のポインタ
渡してしまってた・・・。
まじごめん;;
606:デフォルトの名無しさん
08/04/11 20:30:25
悪い事いわないから、vector 使え。
607:デフォルトの名無しさん
08/04/11 23:28:52
>>596
>さらにワイド文字とマルチバイト文字の違いがよく分らん
それを調べるのが先だということに気づかないの?
608:デフォルトの名無しさん
08/04/11 23:30:06
出直してくるって言ってるんだからほっとけよ
609:デフォルトの名無しさん
08/04/12 00:33:20
変数をStringだとかChar型で指定することってできますか?
610:デフォルトの名無しさん
08/04/12 00:34:10
????????
611:デフォルトの名無しさん
08/04/12 00:56:30
静的なメモリを確保をしたクラス内に動的に確保したクラスがあるとします
この場合exit(0)が実行された時に正しく破棄が行われますでしょうか?
612:デフォルトの名無しさん
08/04/12 00:59:02
>>611
だいたいOSがうまく解放してくれる・・・かもね。
そんな保障はどこにもない。ちゃんと解放するかJava等に移行しましょう。
613:デフォルトの名無しさん
08/04/12 01:14:07
ぬるぽ
614:デフォルトの名無しさん
08/04/12 01:15:38
>>611
ライブラリの仕様によるけど、
・静的なオブジェクトのデストラクタ⇒呼ばれる
・main()から辿ってその時点までのスタック上にあるオブジェクトのデストラクタ⇒呼ばれない
つまりスタックの巻き戻しは行われないが通常のクリーンアップルーチンは呼ばれる、
が一般的なのでは。何か重要な後処理が必要なら atexit でも書いとくべきだな。
615:デフォルトの名無しさん
08/04/12 01:34:05
atexitを使うことにします
ありがとうございます
616:デフォルトの名無しさん
08/04/12 02:10:32
constポインタpDataのメンバstd::deque<Log> LogDataを参照するpastLog
const std::deque<Log>& pastLog = pData->LogData
を上のように作ってそのiteratorを使用したいのですが
const std::deque<M3Log>::iterator itr = pastLog.begin();
とすると
左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
と怒られます
何処をどうしていいのかわかりません、アドバイスをいただけないでしょうか
617:616
08/04/12 02:12:31
訂正
const std::deque<M3Log>::iterator itr = pastLog.begin();
↓
const std::deque<Log>::iterator itr = pastLog.begin();
618:デフォルトの名無しさん
08/04/12 02:12:40
c++ は良く知らないけど、
std::deque<Log>::const_iterator itr = pastLog.begin();
じゃないの?
619:デフォルトの名無しさん
08/04/12 02:19:58
>>618
ありがとうございます
無事コードがコンパイルを通るようになりました
const_iteratorなんてあったのか・・・
620:デフォルトの名無しさん
08/04/12 03:41:33
>>619
>const_iteratorなんてあったのか・・・
超ワロタじゃないかよ
621:デフォルトの名無しさん
08/04/12 04:19:52
静的確保と動的確保でプライベートメンバ関数の実行に違いが出るようなことは有るでしょうか?
622:デフォルトの名無しさん
08/04/12 09:55:51
外から借りない限り終了すれば仮想プロセス空間ごと消滅するかと。
623:デフォルトの名無しさん
08/04/12 11:01:31
さあて。delete thisするんでない限りは、まー無いんでないかね。
624:デフォルトの名無しさん
08/04/12 12:57:40
#define sucide delete this
625:デフォルトの名無しさん
08/04/12 14:40:30
suicide
626:デフォルトの名無しさん
08/04/12 14:49:06
oh misu superu
627:デフォルトの名無しさん
08/04/12 14:50:30
ifの条件部で変数を宣言したい時に、boolとして評価できない型だとコンパイルエラーになりますよね
std::set::const_iterator it = hoge.find(....);
if (it != hoge.end()) {
// ここで it を使う
}
のようなことをするときにifのブロック内にitのスコープを限定して
if ((std::set::const_iterator it = hoge.find(...)) != hoge.end()) {
のようなことをしたいんですけど無理ですか?
628:デフォルトの名無しさん
08/04/12 15:23:43
無理
629:デフォルトの名無しさん
08/04/12 15:39:39
for ( std...it = hoge.find(...); it != hoge.end(); ) {
break;
}
おすすめはしない
630:デフォルトの名無しさん
08/04/12 15:40:03
{ std::set::const_iterator it; if(...){...} }
631:デフォルトの名無しさん
08/04/12 15:40:50
あるいは空スコープを使うとか。
{
std...it = ...:
if(){
}
}
632:デフォルトの名無しさん
08/04/12 15:54:26
無理やり
template<typename T, template<class> class Comp> class eval_lapper
{
public:
eval_lapper( std::pair<T, T> rhs ) : obj_(rhs.first), target_(rhs.second) {}
operator bool() const { return Comp<T>()(obj_, target_); }
T& obj() { return obj_; }
const T& obj() const { return obj_; }
private:
T obj_;
T target_;
};
int main()
{
std::set<int> s;
//s.insert(123);
if( eval_lapper<std::set<int>::const_iterator, std::not_equal_to > it = std::make_pair( s.find(123), s.end() ) )
std::cout << *(it.obj()) << std::endl;
return 0;
}
633:デフォルトの名無しさん
08/04/12 15:57:33
ifの評価部分ってboolのオーバーロードがあったらちゃんとboolとして評価してくれるの?
634:デフォルトの名無しさん
08/04/12 15:58:44
してくれるが、if 文以外の所でも本当に bool 値として解釈されて欲しい場合でなければ bool のオーバーロードはすべきじゃない。
635:デフォルトの名無しさん
08/04/12 16:00:12
if 文だけでそう解釈されて欲しい場合は、
普通には使われないようなポインタへのキャスト演算子を
オーバーロードするのが一般的。
メンバポインタとか。
636:デフォルトの名無しさん
08/04/12 16:41:51
>>632
面白いなやり方だな
でも、lapper => wrapper じゃね
637:デフォルトの名無しさん
08/04/12 16:53:02
//test.h
struct test{
int a;
test(int a_) : a(a_){}
};
//instance.cpp
#include "test.h"
test obj(1024);
//program.cpp
#include <iostream>
#include "test.h"
extern test obj;
int main(){
std::cout << obj.a << std::endl;
return 0;
}
別々の翻訳単位に型testが定義されてるけど、同一の型として認識されるの?
VC8ではコンパイル通った。
638:デフォルトの名無しさん
08/04/12 17:01:05
そりゃ通るだろ
同じヘッダインクルードしてるんだし
639:デフォルトの名無しさん
08/04/12 17:01:59
メンバ変数が一部が#ifdefあたりで囲んであると
場合によっては非常に愉快な話になるけどね
640:デフォルトの名無しさん
08/04/12 17:09:35
愉快なというかバグな話だろ
641:デフォルトの名無しさん
08/04/12 22:59:36
中々原因が掴めず笑うしかないとかそういうアレだろう
鼻から悪魔が出たらもっと愉快だな
642:デフォルトの名無しさん
08/04/13 22:40:49
String name;
と
String^ name;
の違いはなんですか?ハンドルの意味がわかりません
643:デフォルトの名無しさん
08/04/13 22:48:53
>>642
C++/CLI はスレ違いなのです。
C++/CLI part3
スレリンク(tech板)
644:デフォルトの名無しさん
08/04/13 22:50:41
>>642
とりあえず「C++/CLI ハンドル 自動変数」でググったら説明が見つかると思う。
それで分からなかったら、もう一度おいで。
# CLIってちょい過疎気味の本スレしか無いのな
645:デフォルトの名無しさん
08/04/14 01:32:44
コピーコンスタクタ辺りで質問です。
template <bool M> struct P {
int* _p;
P(int* v=NULL) : _p(v) {}
P(P& v) : _p(v.release()) {} // (1)
~P() { if(M && _p) delete _p; }
void reset(int* v=NULL)
{ if(M && _p && _p != v) delete _p; _p = v; }
int* release()
{ int* temp = _p; _p = NULL; return temp; }
};
P<true> pf(int n) { return P<true>(new int(n)); }
int main() { P<true> a = pf(3); }
上記だと
error: no matching function for call to ‘P<true>::P(P<true>)’
とコンパイルエラーがでます。 しかし (1) を
template <bool _M> P(P<_M>& v) : _p(v.release()) {}
にするとエラーにならずにコンパイルできるようになります。なぜコンパイルエラーがでなくなるのでしょうか? コンパイラは gcc version 4.0.1 (Apple Inc. build 5465) です。
646:デフォルトの名無しさん
08/04/14 01:43:50
>>645
コピーコンストラクタをテンプレート関数にして異なるテンプレート引数の型でも受け取れられるれりれるようにしたから。
647:デフォルトの名無しさん
08/04/14 01:46:07
>>645
よく分からんけど、VC8だとどちらもコンパイル通ったぞ
648:デフォルトの名無しさん
08/04/14 01:49:12
>>647
エスパーすると645は(1)をP(P& v) : _p(v.release()) {}とした上でソースコードのどこかで
P<false> oldObj;
P<true> newObj(oldObj);
とでもしているんだろう。
649:645
08/04/14 01:52:20
>>646
テンプレート引数の型は書き変える前も後も true しか扱わないのに異なる型を受け取れるようにしないと
いけない理由が分かりません。
途中で P<false> に変換されているのも確認できませんでした。
>>647
gcc だけで起きる問題なんでしょうか…
>>647
いやしてないのです。上記のソースのみです。
650:デフォルトの名無しさん
08/04/14 02:17:53
質問です。4桁の乱数を取得する関数なのですが
if(num[i] == num[j])以降のdowhileで必ずループに入ってしまうのですが
原因を教えていただけませんか?
void random::gt(){
srand((unsigned) time(NULL));
num[0] = rand() % 10;
if(num[0] <= 0){
do{
num[0] = rand() % 10;
}while(num[0] <= 1);
}
//その他乱数取得
for(i=0;i<4;i++){
if(i <= 4){
for(j=1;j<4;j++){
num[j] = rand() % 10;
if(num[i] == num[j]){
do{
num[j] = rand() % 10;
system("PAUSE");
}while(num[i] != num[j]);
}
};
}
};
}
651:デフォルトの名無しさん
08/04/14 02:47:43
>>649
Pは接頭語みたいなもので一部の例外を除いて単独では使えない
この場合だとP<true>とP<false>が型
たとえばP<true>を定義したとき、もしP(P&)の記述が許されると
コピーコンストラクタP(P<true>)か
引数付きのコピーじゃないコンストラクタP(P<false>)か曖昧になる
652:>650
08/04/14 03:22:48
日本語でおk
dowhileは必ず1回はループ内の処理を実行するが?
あと、その貼ったソースはそのままか?変更して貼ってない?
653:645
08/04/14 03:33:40
>>651
あーなるほど。コピーコンストラクタかコンストラクタが曖昧になるんですね。
P<true> -> P<false> の変換がされると嫌で書き方に困っていたのですが
P<true> -> P<true> OK
P<true> -> P<false> OK
P<false> -> P<false> OK
P<false> -> P<true> NG
の時に
template <bool M>
struct P {
template <bool _M> P(P<_M>& v);
...
};
template <> template <> P<true>::P(P<true>& v) : _p(v.release()) {}
//template <> template <> P<true>::P(P<false>& v); // NG
template <> template <> P<false>::P(P<false>& v) : _p(v._p) {}
template <> template <> P<false>::P(P<true>& v) : _p(v._p) {}
みたいにもできるってことですね!ありがとうございました。
654:デフォルトの名無しさん
08/04/14 03:33:47
あああ、すいません
if(num[i] == num[j]){のところで
変数num[i]とnum[j]が違っていても処理をしてしまう原因
を知りたかったのです
ソースは特に変えてないと思うのですが
どこかおかしいでしょうか
655:645
08/04/14 03:36:18
違った。P<false> -> P<true> が嫌だった。です。
656:650
08/04/14 03:39:19
またもすいません
>>654は>.650です・・・
657:デフォルトの名無しさん
08/04/14 09:29:44
>>650
i が 0 から 3 をとりながら動き、
そのループのなかで j が 0 から 3 をとりながら動くんですよね。
すると, i = j ならば, num[i] == num[j] となって、system("pause") がかならず
実行されることになります。
なさりたいことは、こんなのでしょうか?
(確認環境 WindowsXP, 処理系 cygwin(gcc 3.4.4)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
658:650
08/04/14 11:06:42
>>657
まさにそんな感じです
ありがとうございます
659:657
08/04/14 11:24:42
>>658
バグってました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
660:デフォルトの名無しさん
08/04/14 14:51:59
set<Class> a, b;とあってaからbに含まれていない要素を取り除きたいときに
remove_ifなんかのアルゴリズムでスマートに書けますか?
661:デフォルトの名無しさん
08/04/14 15:06:05
operator^
662:デフォルトの名無しさん
08/04/14 16:59:15
>>660
#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
int main() {
namespace bll=boost::lambda;
std::set<int> a,b;
a.insert(1);
a.insert(2);
a.insert(3);
b.insert(2);
b.insert(3);
std::remove_copy_if(a.begin(), a.end(),
std::ostream_iterator<int>(std::cout),
bll::bind(std::find<std::set<int>::iterator, int>,
b.begin(),
b.end(),
bll::_1 ) == b.end());
return EXIT_SUCCESS;
}
uu-n...
663:デフォルトの名無しさん
08/04/14 17:49:02
huninnkidearuboost::egg::lazywotukattemitayo
#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/egg/lazy.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/assign/std/set.hpp>
struct base {
template< class Myself, class Arg0, class Arg1, class Arg2 >
struct apply {
typedef Arg0 type; };
template< class Result, class Arg0, class Arg1, class Arg2 >
Result call(Arg0 begin, Arg1 end, Arg2 value) const {
return std::find(begin, end, value);
} };
typedef boost::egg::function<base> op;
boost::egg::result_of_lazy<op>::type
const find_lazy = BOOST_EGG_LAZY({});
int main() {
namespace bll=boost::lambda;
using boost::assign::operator+=;
std::set<int> a,b;
a+=1,2,3; b+=2,3;
std::remove_copy_if(a.begin(), a.end(),
std::ostream_iterator<int>(std::cout),
find_lazy(b.begin(), b.end(), bll::_1) == b.end());
}
uuu-nnn...
664:デフォルトの名無しさん
08/04/14 17:52:02
p_stade乙
665:デフォルトの名無しさん
08/04/14 18:01:20
>>660
a = bはだめなの?
だめだから聞いているんだろうけど。
666:デフォルトの名無しさん
08/04/14 18:06:40
>>665
横からだけど
a : 10,20,30,40
b : 20,50
この場合多分望む結果は
a : 20
だろうけど、>>665だと間違った結果を返す。
667:デフォルトの名無しさん
08/04/14 18:37:09
vectorやらlistで
vector<int>の要素が
1 2 (空白) 3 4 (空白)
の様に途中に空白をいれることはできるのでしょうか?
668:デフォルトの名無しさん
08/04/14 18:46:45
VC++でPC情報を取得するPGを作成します。
プロジェクト作成は(Win32とか)どれを選ぶのが
適当でしょうか?
669:デフォルトの名無しさん
08/04/14 19:40:07
>>668
Linux+GCCがお勧め
670:デフォルトの名無しさん
08/04/14 19:42:55
.exe が出来るならどれでもいいと思う。
671:デフォルトの名無しさん
08/04/14 20:02:18
とあるクラスに関数を一個追加しようとしたところ
.hファイルに関数の本体を書き出すと正常にコンパイルが通るのに
.cppファイルに書き出すと
C2039 'foo' : 'hoge' のメンバではありません。
となってしまいます
これはどういう事でしょうか・・・
672:デフォルトの名無しさん
08/04/14 20:05:04
ソースを見せれ
673:デフォルトの名無しさん
08/04/14 20:10:42
f´'´ ノ ヽ l 、 \!
l / / // ,.ィ´ !', ト、 ヽ. ヽ
. レ′, / //_,..イ// ,| l |lλぃ い. ',
} / { ‐7Ζ_∠!イ 〃 /リ,}/┤!」l 小 !
ノ i| 八//'゛ -`l 〃 /ノ'´ j ! |l/| iイ/
ヽ|l//イ ャ''Tェ歹''`y゙/ 'ヾ歹¨リ`イ!ノ// まさか、ロリコンじゃないわね・・・
) 〃A ``''''"´ '^ r; `'''"´/クK/
Y/ !トヘ. //// //// /.ィi| ;|
|i( l|`Ti\,___ '⌒) ,∠lj_|iリ
{い ヾLr┤:.:.:.:.`:、__,,..イ;:.::.:./勹_」!
``ァ;=<´ ̄``ヽ:ヽ;‐-/;/``Tr-.、
674:デフォルトの名無しさん
08/04/14 20:13:11
>>671
>.cppファイルに
しか書いてなかったとかいうオチだったら、君が泣くまで殴るのをやめない。
675:デフォルトの名無しさん
08/04/14 20:14:56
>>672
仕事でのデータが含まれてるのでちょっとソースは公開できないですorz
>>674
インテリセンスで関数宣言を確認してから中身を書いてるのでそれはないと思います
676:デフォルトの名無しさん
08/04/14 20:25:23
問題が再現するコードを作ってそれを貼ればいいじゃん。
677:デフォルトの名無しさん
08/04/14 20:27:54
テンプレート関数だったらお前の殴る
678:デフォルトの名無しさん
08/04/14 20:39:03
hppで解決♪
679:デフォルトの名無しさん
08/04/14 20:58:05
リビルドし直したら通った・・・
これはどういう事??
680:デフォルトの名無しさん
08/04/14 21:22:35
VCではよくあること
681:デフォルトの名無しさん
08/04/14 21:53:28
そしてインテリセンスが延々と更新されないことも
682:デフォルトの名無しさん
08/04/14 21:58:23
インテリセンスが嘘つくのも。
683:デフォルトの名無しさん
08/04/14 21:58:43
>>667
vector<int>に整数以外のものは入れられません。
仮に、負値を例外として扱ってよいなら空白の代わりに-1を入れておくと言う手もなくはありませんが、
boost::optionalを使ってみてはどうでしょう。
684:デフォルトの名無しさん
08/04/14 22:18:55
メモリが断片化している場合、ポインタに+1した場合はきちんと断片先に飛んでくれるんですか?
それとも型サイズ分だけ強引にアドレスが+1されるんですか?
685:デフォルトの名無しさん
08/04/14 22:21:43
断片化?
どういう状況を言ってるんだ?
686:デフォルトの名無しさん
08/04/14 22:22:45
vectorではなくdequeの実装を言っているのかもw
687:デフォルトの名無しさん
08/04/14 22:25:23
deque のことなら、イテレータに +1 したら断片化先に飛ぶけどポインタは当然無理だな。
688:デフォルトの名無しさん
08/04/14 22:26:51
>>685
1つのデータがメモリに書き込まれる時は必ず連番のアドレスに配置されるんですか?
689:デフォルトの名無しさん
08/04/14 22:27:37
>>688
少なくとも仮想アドレスは連番だが。
物理アドレスは知らんがな。
690:デフォルトの名無しさん
08/04/14 22:28:51
STLとかboostみたいので
RECTとかSIZEを包んだクラスはありますか?
691:デフォルトの名無しさん
08/04/14 22:31:41
CRectならMFCにあるけどな…
692:デフォルトの名無しさん
08/04/14 22:31:51
WTLにも
693:デフォルトの名無しさん
08/04/14 22:32:58
>>689
つまり&で表示されるアドレスは仮想でWindowsが物理メモリの番地とリンクを取って隙間に埋め込んでるから考えなくていいってことですね
ありがとうございました。
694:デフォルトの名無しさん
08/04/14 22:38:39
>>693
それでいいのか?
本当にそれでいいのか?w
695:デフォルトの名無しさん
08/04/14 22:43:16
C++でプロパティー的なものを表現する場合
getとsetはつけたほうがいいの?それともOR?
696:デフォルトの名無しさん
08/04/14 23:04:14
漢は黙ってpublic:
697:デフォルトの名無しさん
08/04/14 23:06:53
それだとブレークポイントはれないじゃん・・・。
698:デフォルトの名無しさん
08/04/14 23:15:52
__declspec(property(get=getHoge, put=setHoge))
int Hoge;
699:デフォルトの名無しさん
08/04/14 23:43:26
winsockのsock関数の第一引数にAF_BTHを指定すると、AF_BTHが定義されていないとエラーがでます。
winsock2.hはインクルードしてるんですが、ほかになにかインクルードしなければいけないんでしょうか?
700:デフォルトの名無しさん
08/04/14 23:55:47
grepかけたらws2bth.hででてきたけど。
701:デフォルトの名無しさん
08/04/15 00:24:06
std::list<int> iListの参照を作りたいのですがこの場合
std::list<int>& refList = iList;
で良いのでしょうか?
702:デフォルトの名無しさん
08/04/15 00:31:23
アドレスを比べてみたらいいと思うよ
703:デフォルトの名無しさん
08/04/15 00:39:51
>>702
簡単に試してみたけど
大丈夫そうな気がしました
704:デフォルトの名無しさん
08/04/15 00:54:33
C言語での構造体の初期化について質問です。
typedef struct Foo_tag{
int a;
int b;
int c;
} Foo;
というような構造体があったときに、
Foo foo = {0};
という初期化を行っているコードをたまに見かけますが、これは何を行っているのでしょうか?
一応MinGW環境で同様のコードを書いてテストしてみましたが、{0} で初期化した構造体はゼロクリアされており、
初期化しなかった構造体にはゴミが入っていました。
ということは、上記のコードは構造体をゼロクリアするという認識でいいのでしょうか?
それと、標準Cの規格でこういう初期化は許されていますか?
構造体のゼロクリア処理は memset() などを利用して行っているコードが多いことを考えると、標準規格ではなさそうな
気がするんですが…。
705:デフォルトの名無しさん
08/04/15 01:00:36
メンバを途中まで初期化すると
残りは0で初期化されるってヤツだったと思う。
標準Cでどうなのかは知らん。
706:デフォルトの名無しさん
08/04/15 01:04:31
Foo foo = {1};でa=1,b=0,c=0になるのが保証されてる
707:デフォルトの名無しさん
08/04/15 01:12:58
>>705-706
ありがとうございます。途中まで初期化ということができるんですね。
それなら構造体をゼロクリアするときはこれを使うと楽かもしれないですね。
(先頭にネストした構造体があったりするとどうなるのかよくわからないので、汎用ではないのかもしれないですが)
708:デフォルトの名無しさん
08/04/15 01:13:32
>>704
初期化時のみOK
709:デフォルトの名無しさん
08/04/15 01:18:46
memsetだとパディングも初期化できるのが利点だったかな
普通の使い方で初期化する必要があるのかどうかは知らないが
710:デフォルトの名無しさん
08/04/15 01:36:11
>>709
ものすごく行儀の悪いコーディングだけど構造体同士を memcmp で比較できる
711:デフォルトの名無しさん
08/04/15 01:58:11
>>710
あくまで「普通の使い方」の話な
キャストしたりすればいろいろ問題も出てくるだろうよ
712:デフォルトの名無しさん
08/04/15 01:59:59
>>704
標準規格です。
713:デフォルトの名無しさん
08/04/15 02:01:05
>>704
昔のコンパイラだと 0 で初期化されません
714:デフォルトの名無しさん
08/04/15 03:28:46
>>660
template<typename Class>
void assign_intersection(std::set<Class>& a, std::set<Class> const& b)
{
std::set<Class> result;
std::set_intersection(a.begin(), a.end(), b.begin(), b.end()
, std::inserter(result, result.end()));
a.swap(result);
}
715:デフォルトの名無しさん
08/04/15 08:00:05
*
**
***
****
...
みたいな感じの出力を得たいのですが、***を出力する部分は、なにか特別な書き方とかないですか?
関数を作るしかないですか?
716:デフォルトの名無しさん
08/04/15 08:06:55
>>715
MFCならスタティックテキストの表示を*に変えるという機能(設定)があったり。
自前でもキー入力(KeyDownとか)→別の変数に格納→その文字数だけ*を表示で簡単に出来る。
717:デフォルトの名無しさん
08/04/15 10:30:07
// * を n 個出力する関数
void f(int n){
for(int i = 0; i < n; i++) std::cout << '*';
std::cout << std::endl;
}
void g(int n){
for(int i = 0; i < n; i++) f(i);
}
718:デフォルトの名無しさん
08/04/15 14:19:49
std::string s(length, '*');
std::cout << s << '\n';
719:デフォルトの名無しさん
08/04/15 20:41:31
#include <iostream>
#include <iomanip>
int main()
{
for (int i = 0; i < 10; ++i)
std::cout << std::setw(i) << std::setfill('*') << "" << std::endl;
}
ところでC++でいいんだよね?
720:デフォルトの名無しさん
08/04/15 22:13:39
C言語ならこんなもんか
void f1()
{
int n, i;
for(n = 1; n <= 10; n ++) {
for(i = 0; i < n; i ++) putchar('*');
putchar('\n');
}
}
void f2()
{
int n;
for(n = 1; n <= 10; n ++)
puts("**********" + 10 - n);
}
void f3()
{
int n;
for(n = 1; n <= 10; n ++)
printf("%.*s\n", n, "**********");
}
721:デフォルトの名無しさん
08/04/16 00:27:56
printfの書式でもっと簡単にできなかったっけ?
イメージ>>720のf3()が近いんだけど・・・使う機会が少ないとすぐにわすれちゃうな・・・
722:デフォルトの名無しさん
08/04/16 00:38:10
>puts("**********" + 10 - n);
このやり方はじめて見た。目から鱗やわ
723:デフォルトの名無しさん
08/04/16 00:42:59
>>722
その鱗はつけておいた方がいいw
724:デフォルトの名無しさん
08/04/16 02:36:32
課題でc++のbasic_stringの様なstringクラスを作っています。
その中でstr >> coutはクラス内でoperator>>を用意することで
動くようになったのですが、cout << strは「二項演算子<<はクラス
strをサポートしていません」と言われてしまいます。
これはどのようにしたらcout << strが出来るようになるのでしょうか?
またお恥ずかしながら、str = "aaa"は作れたのですが、str ="aaa"+"bbb"は
作ることが出来ませんでした。これはどの様に作ったらいいのでしょうか?
どうかよろしくお願いします。
725:デフォルトの名無しさん
08/04/16 02:46:22
なんか物凄く基本的なことのような気がしますが
C言語で、unsigned char から signed char に代入、もしくはその逆を行った場合、ビットバターンは常に保存されますか?
726:デフォルトの名無しさん
08/04/16 02:55:53
>>725
いいえ。
727:デフォルトの名無しさん
08/04/16 03:01:40
>>724
上:strをサポートする二項演算子を書く。
basic_ostream<foobar> & operator <<(basic_ostream<foobar> & os, str & st);
下:無理。
728:デフォルトの名無しさん
08/04/16 03:02:50
>>726
ありがとうございます。そうなると char* を適宜 unsigned char* にキャストしたりしないとダメですね。
一部バイナリが混ざってるファイルを読む必要があったので助かりました。
729:デフォルトの名無しさん
08/04/16 03:58:13
>>728
K&R2 A6.1 (promotion) を参照してください。
char/unsigned char は先に int に変換される点、特に要注意です。
730:デフォルトの名無しさん
08/04/16 04:09:29
>>729 promotion は関係ないだろ。
731:729
08/04/16 04:57:02
>>730
char c = 0x81;
if (c == 0x81)
printf("=\n");
else
printf("!=\n");
の結果って、あれ~?!ってなりませんか?
732:デフォルトの名無しさん
08/04/16 11:52:33
>>731
char が符号付きで最大値が 127 の場合の話なら、
char c = 0x81 の時点で未定義動作。
問題は promotion じゃなくてオーバーフロー。
733:デフォルトの名無しさん
08/04/16 12:09:54
0x81がunsigned charじゃないじゃん
734:732
08/04/16 12:20:21
> char c = 0x81 の時点で未定義動作。
ごめん。間違い。オーバーフローが問題なのは違いないけど、型変換での
オーバーフローは未定義動作じゃなくて、値が処理系定義のものになるか、
処理系定義のシグナルが発生する、らしい。
735:729
08/04/16 20:42:23
>>732 >>734
了解いたしました。
char buffer[N];
...
while (fgets(buffer, N, fp) != NULL) {
if (buffer[i] == ...)
...
}
などと安易に考えると、(たとえば漢字コードの判別など)わからなくなってしまった経験がありました。
unsigned char buffer[N];
とすれば、問題ないのではありますが。
ご指摘ありがとうございました。 またひとつ賢くなりました。
736:デフォルトの名無しさん
08/04/16 20:49:18
>>735
漢字コードをいろいろ扱うなら >>735 だと unicode の時に困るんじゃなかろうか?
(文字列に \0 が含まれる可能性が高いから)
737:デフォルトの名無しさん
08/04/16 21:04:51
C++では以下のように大丈夫そうですけど。
signed char と unsigned char は同表現と書いている
読み間違い?
A char, a signed char, and an unsigned char occupy the same amount of storage and have the same alignment
requirements (3.9); that is, they have the same object representation. For character types, all bits of
the object representation participate in the value representation. For unsigned character types, all possible
bit patterns of the value representation represent numbers.
738:デフォルトの名無しさん
08/04/17 01:47:49
>>737
読みには自信ないのですが、
単に、
1) char/unsigned char/signed char のいずれも同じ量のメモリを占有する。
2) char/unsigned char/signed char のアラインメント(配置位置、偶数バイトを先頭にする、アドレスが4 の倍数のバイトを先頭にする、など)が同一である。
という意味でのみ same としているだけではないでしょうか。
char / unsigned char / signed char の表現がまったく同一であるというのは不可能と思われますのですが。
後続の文では、
char のすべてのビットが数をあらわしているわけではない(単に関係するといっているだけ、符号の場合もありますよ、ということでしょうか。)
unsigned char はすべてのビットが数を構成する要素となる。
と読めます。
739:デフォルトの名無しさん
08/04/17 07:16:24
template <class T>
template <typename T>
この2つはちがいがありますか?
740:デフォルトの名無しさん
08/04/17 07:21:28
違いは無い
741:デフォルトの名無しさん
08/04/17 08:20:34
class じゃないのも使うよなーとか思っていつも typename にする俺
742:デフォルトの名無しさん
08/04/17 08:26:55
俺もある時期から、typenameが手癖になってしまった。
別にこだわるわけじゃないから、もし仮にclassと書いてくれと職場で言われたら
二つ返事でclassにするけど。
743:デフォルトの名無しさん
08/04/17 08:30:00
なんとなく表明の意味で使い分けるかも。
その後しっかり中でstatic_assertするけどね。
744:デフォルトの名無しさん
08/04/17 10:03:28
クラス配列をnewで生成する時に呼ばれるコンストラクタを指定できますか?
745:デフォルトの名無しさん
08/04/17 10:06:12
残念ながらできない。
746:デフォルトの名無しさん
08/04/17 11:04:06
strcatを使わずに
char src[ ] = "seikima"
char dest[4] = "tsu"
という文字列を結合し、表示させることが出来ますか?
747:デフォルトの名無しさん
08/04/17 11:10:49
>>746
char result[11];
sprintf(result, "%s%s", src, dest);
printf("%s\n", result);
748:746
08/04/17 11:14:54
746です。言葉足らずでした。
sprintfも使わずにforを使って何とか表示させたいのですが
いかがでしょうか?
749:デフォルトの名無しさん
08/04/17 11:25:24
>>747じゃないがやっつけ仕事なんで間違ってたらごめん
char ret[11];
for(int i =0 ; i < strlen(src) ; i++)
{
ret[i]= src[i];
}
for(int i=0 ; i <strlen(dest) ; i++)
{
ret[i+strlen(src)}=dest[i];
}
printf("%s\n",ret);
750:746
08/04/17 11:27:20
>>749
>>746に書いたんですが、今回string.hに関するものは使っちゃいけないので
strlenも使用出来ない感じです。
751:デフォルトの名無しさん
08/04/17 11:34:17
>>746にそんなこと書いてNEEEEEEEwwwww
strlen()をsizeof()-1に変えれば同じ動作だ
752:デフォルトの名無しさん
08/04/17 11:37:17
>>746
条件後だししすぎ
char result[20], *p, *q;
for(p=result,q=src;*p++=*q++;);
for(p--,q=dest;*p++=*q++;);
753:746
08/04/17 11:46:22
重ね重ね、申し訳ないです。
ポインタも使ってはいけないようです。
754:デフォルトの名無しさん
08/04/17 11:50:24
宿題かよ。消えろ。
755:デフォルトの名無しさん
08/04/17 11:51:00
ついでに、その出題者はぶん殴っていい。
756:デフォルトの名無しさん
08/04/17 11:55:25
宿題なら学習内容に沿ってるはずだから
テキストでも目を通した方が早いんじゃないの?
何の項目についての課題か分からないんじゃ答えようがないわ
757:デフォルトの名無しさん
08/04/17 11:57:30
入念な釣りだなあ。
次は「 [] 演算子も使えません 」とか?
758:746
08/04/17 11:59:26
一旦、整理してみます。
課題:配列について
内容:char src[ ] = "seikima";
char dest[4] = "tsu";
と配列を用意し、destの中身をsrcに結合させる。
ただし、for文を使うこと・ポインタ、string.hは使ってはならない。
759:デフォルトの名無しさん
08/04/17 12:03:12
>>758
宿題は宿題スレへ。
C/C++の宿題を片付けます 105代目
スレリンク(tech板)
760:746
08/04/17 12:03:56
>>759
誘導ありがとうございます。ご迷惑をおかけしました。
761:デフォルトの名無しさん
08/04/17 12:06:07
連結するための容量は確保しなくていいのか、とか
dest を書き換えずに src に書き込むのか、とか、
宿題にしてもクソすぎるだろ。学校名晒してくんない?
762:デフォルトの名無しさん
08/04/17 12:12:22
746の時点で明らかに宿題じゃないか。なにを今更
763:デフォルトの名無しさん
08/04/17 12:21:40
printfの様な、引数の数が一定しない関数を作るにはどう定義し
中でどう読めば良いのでしょか。
764:デフォルトの名無しさん
08/04/17 12:25:31
Cで標準ライブラリが用意されてない環境なら、自動的に>>758の条件に
近くなると思うけど、ポインタも駄目てのは解らん。
765:デフォルトの名無しさん
08/04/17 12:30:14
>>763
関数のオーバーロードとかでできんじゃね
766:デフォルトの名無しさん
08/04/17 12:30:41
可変長引数でぐぐる
767:デフォルトの名無しさん
08/04/17 12:30:53
>>763
URLリンク(wisdom.sakura.ne.jp)
768:デフォルトの名無しさん
08/04/17 12:31:06
>>763
可変長引数とかva_argsなんかでググるといいと思うよ。
769:デフォルトの名無しさん
08/04/17 12:31:25
>>763
可変引数または可変個引数でぐぐる
770:デフォルトの名無しさん
08/04/17 12:34:09
重婚もいいところだな
771:763
08/04/17 12:37:07
有り難うございます。
stdarg.hなんてヘッダ、目にした事すらありませんでした。
772:デフォルトの名無しさん
08/04/17 12:40:07
ところで可変長引数って設計的にどうなのかな?
個人的には設計に失敗してやむなく・・・ってイメージがあるのだが
773:デフォルトの名無しさん
08/04/17 12:45:05
ハックやチートの部類に入りそうなやり方してるよね。
774:763
08/04/17 12:46:42
>>772
**でも事足りるんですが、その場でわざわざポインタの配列を用意しないと
いけない場合が出てくるだろうし、その場で列挙出来たら楽かなぁとか。
775:デフォルトの名無しさん
08/04/17 12:50:54
>>772
型安全性に問題があるから、特に C++ ではやむなくって意識でいいと思う。
C++ 的には iostream や boost::format みたいに演算子で繋ぐのが正解かな。
776:デフォルトの名無しさん
08/04/17 22:15:48
CかC++の組み込みの勉強したいんですがお勧めの本ありませんか?
組み込みの本って探してもどこにも無いし、ネットで買おうにも中身がどんな感じかも分からないんでどれを買えばいいのか分からないです
あとできれば必要で組み込み初めてに適した機材とかも教えて欲しいです
777:デフォルトの名無しさん
08/04/17 23:24:03
ソフィアシステムズで評価ボードを買ってBSPをいじって動作確認すればいいお^^
778:デフォルトの名無しさん
08/04/18 00:41:53
以下の2つは戻り値以外に何か違いがありますか?
fwrite(buf, 1, 1024, fp);
fwrite(buf, 1024, 1, fp);
779:デフォルトの名無しさん
08/04/18 00:45:24
沢山の実数(doubleとか)が生成されるときに、その分散を計算したいんですが、これってやはり一度生成される全部の実数を
どこか配列とかに格納しないとだめでしょうか?
780:デフォルトの名無しさん
08/04/18 01:00:21
>>779
分散=(X^2 の平均) - (Xの平均)^2
を使用すれば、1pass で計算できますよ。
781:デフォルトの名無しさん
08/04/18 01:04:09
値が生成されるたびに、X^2とXの平均を計算しておくのですね。
782:デフォルトの名無しさん
08/04/18 01:07:17
逐一平均を計算するんじゃなくて、合計値と要素数を記憶だな。
最後にまとめりゃOK
783:デフォルトの名無しさん
08/04/18 01:23:46
>>778
もしかしたら処理速度が変わるかも・・・ね?
784:デフォルトの名無しさん
08/04/18 02:02:27
色々ありがとうございました。クラスをつくってみました。
class stat
{
public:
stat() : sum(0), sum_square(0), num(0) {}
void push(double a) {
sum += a;
sum_square += a*a;
++num;
}
double mean() {
return sum / num;
}
double variance() {
return sum_square/num - (sum/num)*(sum/num);
}
private:
double sum;
double sum_square;
int num;
};
785:デフォルトの名無しさん
08/04/18 07:50:12
意図した通りに受け取れないのですが、なぜでしょうか。
「GCCではgetche」の行のprintf()をコメントアウトするとちゃんと取れるのですが
#include <stdio.h>
int main(void)
{
int for1inc = 0;
char userinput = 0;
for(for1inc=0; for1inc < 10; for1inc++)
{
printf("文字を入力 : \n (GCCではgetche()が使えず改行コードと共に入力されるので5回までしか入力不可) \n\n");
userinput = getchar();
printf("Your input is %c. ""%c"" ASCII code is %d. \n", userinput, userinput, userinput);
for( ; userinput; userinput--)
{
printf("%c", '.');
}
printf("\n");
}
return 0;
}
786:デフォルトの名無しさん
08/04/18 09:32:34
>>778
>783の戯言はさておき、途中でエラーが発生したときの扱いが違う。
前者は書き込みに成功したバイト数が得られるが、
後者は1024バイト全てが書き込めたかどうかしか判らない。
787:デフォルトの名無しさん
08/04/18 10:10:31
>>786 それが戻り値の違いなんでしょ。
788:141
08/04/18 10:29:25
すみません。以下のコード、BCCでは一応正常にファイルから
読み込んで画面に表示してくれますが、VC++では表示してくれ
ません。プログラムで何か処理が抜けているんでしょうか?
#include "stdafx.h" // VC++の場合
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int i;
double x,y;
ifstream fin;
fin.open("aaa.dat");
while(fin >> i>> x >> y) cout << i << ' ' << x <<' ' << y << endl;
fin.close();
// cin>>i; // VC++の場合
return 0;
}
aaa.datの中身(テキスト)
1 10.0 12.3
2 20.0 20.5
3 30.0 30.8
4 40.0 50.6
789:デフォルトの名無しさん
08/04/18 10:39:04
↑名前の141、以前のもので意味はありません。
790:デフォルトの名無しさん
08/04/18 11:04:56
VC9で普通に動いてるけど。
791:デフォルトの名無しさん
08/04/18 11:14:42
メイン文で使っている*argv[]をユーザ関数内で使いたいので
ユーザ関数では仮引数をchar **a[]にしているのですが、実引数は何にすればいいのか分からないので教えて下さい
792:デフォルトの名無しさん
08/04/18 11:15:46
>>791
argv そのまま渡せるように引数も同じ型にしとけよ。
793:デフォルトの名無しさん
08/04/18 11:27:51
>>792
argvをそのまま渡すようにするには、ユーザ関数の仮引数と呼び出す際の実引数は何にすればいいのでしょう?
794:デフォルトの名無しさん
08/04/18 11:30:16
>>793 仮引数は main にある argv と「同じ型」、実引数は argv 。これでいいか?
795:デフォルトの名無しさん
08/04/18 11:48:44
>>794
分かりました、ありがとうございました。
796:デフォルトの名無しさん
08/04/18 13:36:50
>>788
エラーとかじゃなくて単に何も表示されない?
797:デフォルトの名無しさん
08/04/18 13:39:11
ファイルの置き場所ミスってるだけじゃねーの?
798:788
08/04/18 15:50:11
VC++2008 Express Editionでdebugモードでコンパイルし、
データファイルaaa.datをdebugフォルダに入れて実行ファイル
を実行すると正常に実行されます。ですが、統合環境では何も
表示されないです。
Projects\test\test (testは私がつけたプロジェクト
名のフォルダ) というフォルダにデータファイルを置
くと統合環境ではうまくいくようです。しかし、こん
なこと最初はわかんないよ。
799:デフォルトの名無しさん
08/04/18 15:55:53
>>798
フルパスでファイルを扱うのでなければ、カレント
ディレクトリをちゃんと意識するようにしないと。
800:デフォルトの名無しさん
08/04/18 16:00:30
is_openでちゃんと開けたか確認したほうがいいよ
801:デフォルトの名無しさん
08/04/18 16:29:49
open使わずに
std::ifstream fin("...");
てやったほうがいいよ
close後何も処理しないのならcloseも不要だよ
802:デフォルトの名無しさん
08/04/18 18:12:43
C++やろうと思うんですけど、オススメの教本教えてください
Cとjavaは一応できます
803:デフォルトの名無しさん
08/04/18 18:15:06
boostのソースコード(無料)(偏差値70)
804:デフォルトの名無しさん
08/04/18 19:10:22
メモリは並列にアクセスできますか? 例えばHDDだと2台あればパフォーマンス落ちずに同時アクセスできますが
805:デフォルトの名無しさん
08/04/18 19:17:44
>>804
NUMAとかそーいうキーワードで調べてみるといいと思う。
806:デフォルトの名無しさん
08/04/18 19:38:09
>>777
ありがとう。評価ボード調べてみたらくそ高けぇw
ごめんなさい勉強用程度なら1万程度もあれば揃うだろうとなめてました
807:デフォルトの名無しさん
08/04/18 19:42:52
>>806
こんなのから始めた方がいいよ。
URLリンク(hijiri3.s65.xrea.com)
808:デフォルトの名無しさん
08/04/18 19:51:44
>>807
㌧ これは面白そう
もうちょっとググって組み込みのこと勉強してきます
809:デフォルトの名無しさん
08/04/18 20:07:21
>>805 トンクス!
810:デフォルトの名無しさん
08/04/18 20:32:22
>>785
提示されたコードをコンパイルしましたが、特に異状はないと思います。
環境とコンパイルオプションを教えてください。
当方が確認した環境は WindowsXP, コンパイラはgcc3.4.4(cygwin)です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
811:デフォルトの名無しさん
08/04/18 22:15:10
>>798
[プロジェクト]-[プロパティ]-[構成プロパティ]-[デバッグ]-[作業ディレクトリ]
812:デフォルトの名無しさん
08/04/18 22:41:28
#include <stdint.h> はどの環境でも使えますか?
とブーストとかSTL portとか入れればどれでも使えますか?
32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです
使い物になるので使いたいのですが互換性はなかなかあるんですか
813:デフォルトの名無しさん
08/04/18 22:42:11
文書が色々とおかしいです
エスパーでおねがいします
814:デフォルトの名無しさん
08/04/18 22:55:18
VC2008で対応していなかった為、stdint.h使うのをやめることにしました
815:デフォルトの名無しさん
08/04/18 22:56:44
わかりました
がんばってください
816:デフォルトの名無しさん
08/04/18 22:58:30
>>812
> #include <stdint.h> はどの環境でも使えますか?
いいえ。
> とブーストとかSTL portとか入れればどれでも使えますか?
いいえ。
> 32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです
いいえ。
> 使い物になるので使いたいのですが互換性はなかなかあるんですか
いいえ。
817:デフォルトの名無しさん
08/04/18 23:08:19
日本語学びたての外国人か
コンピューターにものすごい興味がある赤ん坊のどちらかだな。
818:デフォルトの名無しさん
08/04/18 23:22:53
外国人の人だと思うので、添削してみました。頑張ってね。
初心者なのですが、いくつか質問させてください。
#include <stdint.h>はどの環境でも使えますか?
boostとかSTL portとかは、インストールすれば使えますか?
32bit環境で、64bit整数のビット演算、掛け算がかなり速くできて、
使い物になりそうなので使いたいのですが、互換性についてはどうでしょうか?
819:デフォルトの名無しさん
08/04/18 23:23:06
std::vector<std::string> vtSource; を UTF16 に変換して std::vector<std::wstring> vtDest; に保存したいと思っています.
// string >> wstring 変換関数(中身はダミー)
std::wstring A2WString(const std::string& strSource))
{
return std::wstring(L"out");
}
この変換関数での変換は以下のコードでできました.
std::vector<std::string> vtSource;
std::vector<std::wstring> vtDest;
vtSource.push_back( "AbC" );
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ), A2WString );
しかし,変換関数にデフォルト引数があるとコンパイルエラーになりました.
std::wstring A2WString2(const std::string& strSource, int i=0)//デフォルト引数がある
{
return std::wstring(L"out");
}
transform 第4引数で bind2nd や ptr_fun を使用すればいいような気がするんですが,どのように書けばいいんでしょうか?
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ),
std::bind2nd( std::ptr_fun(A2WString2), 0) );//コンパイルエラー
Window2000
Visual C++ 2005 express edition
820:デフォルトの名無しさん
08/04/18 23:26:01
>>812
C++なら、Boostを入れると<boost/cstdint.hpp>が使える。
名前空間boostに入っていること以外はだいたいC99の<stdint.h>と同じ。
821:デフォルトの名無しさん
08/04/18 23:27:47
>>819
いったん別の関数を挟めばいいはず。
inline std::wstring A2WStringHelper(const std::string& strSource)
{
return A2WString(strSource);
}
こういうものを作って、std::transformにはこれを渡す。
822:デフォルトの名無しさん
08/04/18 23:54:40
スタティックテキストのプロパティCaptionを変更するにはどうすればいいんですか?
IDC_STATIC.Caption("aaa");
で動かないんですけど
823:デフォルトの名無しさん
08/04/19 00:01:09
IDC_STATIC.Caption = "aaa";
GetDlgItem(IDC_STATIC)->Caption = "aaa";
これでも動きません
824:デフォルトの名無しさん
08/04/19 00:09:19
>>822
IDC_STATICは言わばワイルドカードなので、
キャプションを変えたいスタティックテキストに個別のIDを割り当てる必要があります。
825:デフォルトの名無しさん
08/04/19 00:10:34
つーか、そもそも書き方も判ってなくてコンパイルも通らないならエラーメッセージを張れと。
826:デフォルトの名無しさん
08/04/19 00:22:56
ありがとうございます。名前を付けました
GetDlgItem(IDC_STATICTIME)->Caption = "aaa"
error C2039: 'Caption' : 'CWnd' のメンバではありません。
となります
827:デフォルトの名無しさん
08/04/19 00:27:11
IDC_STATICTIME->Caption = "aaa"
これだと
error C2227: '->Caption' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
こういうエラーになります。
828:デフォルトの名無しさん
08/04/19 00:27:43
Captionなんて無いよ・・・とエラーが教えてくれてるじゃん
なんでそんなにCaption大好きなの?
GetDlgItem(IDC_STATICIME)->SetWindowText("aaa");
829:デフォルトの名無しさん
08/04/19 00:30:40
ありがとうございます
別に好きなわけじゃないんです
VBの時はこうやっていたので
プロパティの項目で設定できないのならVC++で項目の意味はあるんですか?
全部のプロパティの設定方法を調べなきゃいけないんでしょうか?
830:デフォルトの名無しさん
08/04/19 00:35:46
プロパティ?ダイアログの?
あんなのは飾りだ。
831:デフォルトの名無しさん
08/04/19 00:39:07
意味があるとしたら、設計時に入れれば、コーディングしなくて良い事ぐらいかな?
VCは他もみんなこんな感じだから、VBからだと慣れるしかないな。
プロパティのVisible項目→コーディング時はShowWindow();
832:デフォルトの名無しさん
08/04/19 00:44:01
OK覚悟はできたwwww
833:デフォルトの名無しさん
08/04/19 00:55:43
C#を一通りやった者ですが、CよりC++の方が始め易いでしょうか?
834:デフォルトの名無しさん
08/04/19 01:08:42
C# からなら C は不便に感じると思う。
C++ のがいいかと。
835:819
08/04/19 01:46:47
>>821 ありがとう.とりあえずそうやればできました.
ただ,何でこれは通らないんでしょうか?
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ),
std::bind2nd( std::ptr_fun(A2WString2), 0) );
A2WString2() の第一引数の参照型をやめたらこれでもコンパイルできましたが,
もしよろしければどなたかご教示願います….
//引数の参照型をやめる
std::wstring A2WString2(const std::string strSource, int i=0)
{
return std::wsting(L"out")
}