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


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

【初心者歓迎】C/C++室 Ver.46【環境依存OK】



1 名前:◆NUNUK382Dk mailto:sage [2007/12/27(木) 20:32:47 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.45【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1197090562/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

2 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:36:19 ]
>>1


3 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:37:35 ]
ソースコードを載せる人はちゃんとインデントをつけましょう。
半角スペース、タブ文字は2chでは使えません。
全角スペースを使ってもいいですが、 と入力すると半角スペースとして表示されます。
全角スペースではそのままコピペして使うことができないので、
ここにソースを貼るときはできる限りエディタでタブ文字等を に置換しましょう。

4 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:45:18 ]
 本当か?

5 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:48:16 ]
 うん
本当

6 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:52:14 ]
やべえ、うちの2chブラウザだと、
& nbsp;って文字まで半角スペースに変換しやがる
何この無駄な機能w ふざけんなww

7 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:53:43 ]
>>3の が見えないってことか?
ハイ機能だな

8 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 01:23:02 ]
ポップうpで見れば問題解決なのだが

9 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 02:18:52 ]
/**/

10 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 03:48:46 ]
 test



11 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 07:48:44 ]
 
 

12 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 15:00:45 ]
失礼します。
当方VC++2005ExpressEditionを使用しています。
作成したプログラムをビルドをしたら
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__dispose_library が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__close_reader_writer が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__read_block_without_encryption が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__write_block_without_encryption が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__polling_and_get_card_information が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__open_reader_writer_auto が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__initialize_library が関数 _main で参照されました。
1>sample_09.obj : error LNK2019: 未解決の外部シンボル __imp__get_last_error_types が関数 "void __cdecl error_routine(void)" (?error_routine@@YAXXZ) で参照されました。
1>C:\Documents and Settings\mouna\My Documents\Visual Studio 2005\Projects\testtest\Debug\testtest.exe : fatal error LNK1120: 外部参照 8 が未解決です。
1>ビルドログは "file://c:\Documents and Settings\mouna\My Documents\Visual Studio 2005\Projects\testtest\testtest\Debug\BuildLog.htm" に保存されました。
1>testtest - エラー 9、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

というメッセージが出てしまいました。
これらはどのように対処すればいいのでしょうか。

13 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 15:18:46 ]
>>12です。
Cとしてコンパイルをしないといけないのかと思い
extern "C" {
を加えてみたのですがやっぱりかわりませんでした。

14 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 15:23:32 ]
必要なライブラリをリンクしてないからでしょ

15 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:27:16 ]
アーケードのをクリアしたなあ。
8面で穴に落とす係りの奴が出てきて一発殴ると終わるよね。

レバーを入れるのと同時にパンチを連打すると当たりやすいんで
やたら忙しくココココココンってレバーをやりながらボタン連打してた。
ジャブが二発入ったらストレート、あとはその繰り返しで
適当に上下に振って動かしながらやれば何とかなるよね。

16 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:27:47 ]
誤爆

17 名前:デフォルトの名無しさん [2007/12/28(金) 20:03:19 ]
>>14
おっしゃるとおりでした。
2日間もバカみたく考えてましたw
無事解決しました。
ありがとうございました!

18 名前:デフォルトの名無しさん [2007/12/29(土) 13:39:40 ]
ファイル読み込みについて質問です、
ファイルの何バイト目から読み込むというのはできるっぽいんですが、
ファイルのX行目から読み込みたい場合、
getlineをX回実行という方法で行うんでしょうか?

19 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:43:19 ]
>>18
それで不都合がなければそれでいいんじゃね?

20 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:43:24 ]
Yes
ランダムで何行目って読む場合は各行の場所を保存しておくと便利



21 名前:デフォルトの名無しさん [2007/12/29(土) 14:05:53 ]
>>19-20
別に不都合はないんですが、直接飛べる方法があるなら
そっちの方が早いかなと思いまして

ありがとうございました

22 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 14:35:59 ]
専用フォーマットにしていいんなら
struct file_header {
unsigned int line_number;
};

struct line_header {
unsigned int offset_address;
};

file_header header;
line_header lines[header.line_number];
char line0[];
char line1[];
......

にすればすぐ読み出せるぞ。


23 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 15:51:17 ]
質問です。
引数をリストにしたいのですが、
リストを作るところで、困っています。

int main(int argc, char *argv[]){

typedef struct tagListNode{
struct tagListNode *prev;
struct tagListNode *next;
char *argv;
}Listnode;

Listnode list[argc-1];

for(i=0;i<argc;i++){ <--ココ
list[i].argv = argv[i+1];
list[i].prev = NULL;
list[i].next = &list[i+1];

exit(0);
}

何か良い方法はないでしょうか?

24 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 15:55:03 ]
リストのことをちゃんと書いた本でも読め。
そうでもなければおとなしく std::list 使っとけ。

25 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:02:12 ]
>>24
すいません。
c++では無いんです。
ああ、そうか!
ちょっと良い案思い浮かんだんで、試してきます。

26 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:12:36 ]
とりあえず、双方向リストはリングリストにすると実装しやすいよ。

27 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:13:35 ]
良く見たら確かに C99 だな。

まあ、exit(0); じゃなくて return 0; でいいと思うが。
どっちも同じと言えば同じだが。

28 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:57:16 ]
int n = 2007;
if ( n == false) {
  // nが偽だったら実行
  exit(-1);
}

の内側が実行されてしまいます。
どうすれば治りますか?

29 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:01:42 ]
直るも何も、int と bool を比較している時点で何かおかしい。

30 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:11:26 ]
できたー!
んですが、どこかで失敗しているらしく、終了しません。
1000 ガンダムみたいに、数字と文字のペアを管理するリストを作って、
引数に./a.out 1000 ガンダム 2000 ウルトラマン 3000 仮面ライダー
を取るとして、引数が
./a.out 1000 ガンダム なら動くんですが、
./a.out 1000 ガンダム 2000 ウルトラマン
になると、処理が戻ってこなくなります。
うまく2個目のリストが出来ていないみたいなんですが、どこが間違っているでしょうか?
typedef struct tagListNode{
struct tagListNode *prev;
struct tagListNode *next;
char *data;
char *argv;
}ListNode;




31 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:12:11 ]
int i;
ListNode *first, *last, *new;
first = last = NULL;

do{
i = 1;
new = (ListNode*)malloc(sizeof(ListNode));
new->data = argv[i];
new->argv = argv[i+1];
new->next = NULL;
i = i+2;

if(NULL != last){
last->next = new;
new->prev = last;
last = new;
}
else{
first = last = new;
new->prev = NULL;
}

}while (i < argc);

32 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:13:30 ]
 >>28
 確かに、>>29 は正しいが、C,C++ではよくあること。

 その if より前に n に false が代入された。
 あるいは、その処理系では、false が、 2007 とされている。
 あるいは、どこかその処理より前で、
#undef false
#define false 2007
を書かれている。

33 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:19:09 ]
C/C++ でも if(!n) とすればいい話だな。
もし n が真偽を表現しているのであれば。

34 名前:25 mailto:sage [2007/12/29(土) 17:31:15 ]
すいません。
解決しました。
do{
i = 1;
new = (ListNode*)malloc(sizeof(ListNode));
new->data = argv[i];
new->argv = argv[i+1];
new->next = NULL;
i = i+2;

i=1;
do{
new = (ListNode*)malloc(sizeof(ListNode));
new->data = argv[i];
new->argv = argv[i+1];
new->next = NULL;
にしたら動きました。
感動!

35 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:35:01 ]
new->argv じゃなくて new->prev じゃないの?

36 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:44:55 ]
#include <stdio.h>

void test(void){
  puts("test");
}

void hoge(int x){
  if(x==0)return test();//←ここ
  else puts("hoge");
}

int main(){
  hoge(0);
  return 0;
}

以上のコードがbccで通る(警告は出る)んですが、
これって規格上問題ないんですか?

37 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:47:45 ]
2行に分ければいいじゃん

38 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:51:25 ]
規格上は戻り値の型が void の場合は
return 文は引数を取ってはならない。

39 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:52:43 ]
hoge()がvoidなのにreturnして怒られない?

つーかこの仕様だとreturn要らないような気がするのだが

40 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 17:56:42 ]
test の型も void だから通すコンパイラもありはする。
でも、規格上は問題あり。



41 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 18:31:41 ]
まあ、おとなしく { } つけろってこった。

42 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 18:40:15 ]
戻り値型voidの関数でvoidをreturnするのは合法だと思ったが

43 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 18:58:17 ]
普通は合法なら警告はでない。

44 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 18:59:00 ]
んなこたーない。

45 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 20:46:11 ]
>>40
C++でコンパイルすれば問題ない

46 名前:デフォルトの名無しさん [2007/12/29(土) 22:26:28 ]
すいません、コールバック関数って何ですか?
例えば、
typedef int (CALLBACK *OPEN)(char *);
typedef int (CALLBACK *CLOSE)(int);
ここで記述されているCALLBACKというものがそうらしいのですが、
さっぱりわかりません。




47 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:02:04 ]
>>46
環境が何だか分からんが、そのCALLBACKは何処かで#defineされてるもので
コールバック関数とは直接的には関係ない。

48 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:16:49 ]
>>46
CALLBACKはWindowsなら__stdcallの別名で通常は修飾なしの関数と同じ。
コープバック関数ってのはイベント通知や内部でユーザー定義の関数呼び出す場合に関数に渡すユーザー関数のポインタ。


49 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:19:00 ]
どうみてもコールバック用の関数ポインタ
CALLBACKならWindows環境だと__stdcall
実はWindowsのエントリポイントであるWinMainにつけるWINAPIも、__stdcallだったりする
__stdcallは呼ばれた側がスタックの解放をするって動作を指定する
だからコールバックできるんですね

コールバックはどっかから呼び出してもらう関数のこと
折り返し電話してもらうことをコールバックっていうよね
あれと同じで、自分から明示的に呼び出さない
自分、っていっているのは、右手が恋人のおまいじゃなくて、コールバック関数が定義された側の処理

50 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:26:11 ]
>>49
コールバックできるかどうかに__stdcallは関係ないよ。



51 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:31:57 ]
>>50
そりゃ「できるかどうか」に限定すれば関係ないけどね

52 名前:25 mailto:sage [2007/12/30(日) 08:28:19 ]
すいません。
どうしても解けない問題なので、お教えください。
1000 ガンダム 2000 ウルトラマン 3000 ウルトラマン 4000 仮面ライダー
のような数字と文字列をメンバに持つ構造体で、
もし、文字列が同じだった場合、リストを繋ぎ変えてこの場合
1000 ガンダム 3000 ウルトラマン 4000 仮面ライダー
と言う風にしたいんです。
どこを直せば良いでしょうか?

typedef struct tagListNode{
struct tagListNode *prev;
struct tagListNode *next;
char *data;
char *argv;
}ListNode;

ListNode *first, *last, *point;
/*first(1000 ガンダム)->(2000 ウルトラマン)-> (3000 ウルトラマン)-> last(4000 仮面ライダー)というリストが出来た。*/



53 名前:25 mailto:sage [2007/12/30(日) 08:29:07 ]
point = first->next;
for(this = first;this != NULL;){
if(NULL == first->next)
break;
if(NULL == point->next)
break;

if(0 == strcmp(this->argv,point->argv)){
if(NULL != point->prev)
point->prev->next = point->next;

else
first = point->next;

if(NULL != point->next)
point->next->prev = point->prev;

free(point);
continue;/*文字列がかぶっているリストが除外されたので(1000 ガンダム)から調べ直し*/
}else point = point->next;/*文字列がかぶっていないので次のリストの文字列と比較*/
}


54 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 08:56:17 ]
>どこを直せば良いでしょうか?
データ構造の設計を0から。

55 名前:25 mailto:sage [2007/12/30(日) 09:07:15 ]
え、リストじゃ駄目ってことですか?
じゃあ、何が良いんですか?
配列?

56 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:13:17 ]
学校の課題とかならともかくリスト構造使う意味がわからない

57 名前:25 mailto:sage [2007/12/30(日) 09:23:39 ]
えっと、引数の個数がいくつ有るか分からないからです。


58 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:27:23 ]
引数・・・まあいいか

リスト構造わかってるのになんでわからないのかわからない、それ自体写しか?
データ構造って指摘されてるのは"1000 ガンダム"とかいれちまってるせいじゃないの
それにしたってまあ比較は出来るけど1000と"ガンダム"でわけようぜ

というかなんでその問題が解けないか全く理解出来ない

59 名前:25 mailto:sage [2007/12/30(日) 09:39:58 ]
1000 とガンダムは分ける事は出来ないんです。
引数は1000 ガンダム 2000 ウルトラマンと分かれているんですが、
プログラムの中ではペアで管理しないとまずいんです。
リニアサーチを参考にしたんですが、どうしても、
リストの繋ぎ替えがうまく行かないんです。
malloc: *** Deallocation of a pointer not malloced: 0x300260;
This could be a double free(), or free() called with the middle of an allocated block;
Try setting environment variable MallocHelp to see tools to help debug
ってエラーが出るんです。
do{}while{}を使おうとしてたんですが、whileの条件がどうしても書けなくて...

60 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:43:29 ]
ペア管理って、だから構造体にいれんじゃないの

つなぎかえなら図でも書いてみろ、やることは単純だ
whileの条件はわかりやすくしたきゃ末尾にnullでも明示的にいれとけ



61 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:44:38 ]
要素の除外を効率的に行うには確かにリストは最適ではあるわな。
リストの組み替えをしたいなら、
リストの組み替え前と組み替え後の状態を紙に書いて、
どう変化させればいいかを考えてみるといい。

あと、リストを実装する場合、
リストの端っこは、NULL にするより、
端っこを表すダミーのノードを作った方が実装しやすい。

62 名前:25 mailto:sage [2007/12/30(日) 09:50:28 ]
わかりました。
もちょっと努力してきます。

63 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 10:09:21 ]
ていうか、そのためのlastなんじゃないの?>61

64 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 10:27:58 ]
コマンドラインからだろうとファイルからだろうと、通常事前に件数は把握できるだろうから
その必要がない限りリスト構造を使う意味はないと思うが。

65 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 10:31:22 ]
>>63
違う。
ダミーのノードは全ての有効なノードとは異なるノード。
有効なノードが0個の時でも存在してないといけないわけで。

66 名前:25 mailto:sage [2007/12/30(日) 16:14:57 ]
うぇぇん。やればやるほど分け分かんなくなってきた。
まず、今のやり方で進んでいった場合、
1000 ガンダム 2000 ガンダム3000 ウルトラマンのように、 
しょっぱなに消したい文字列がある場合はともかく、
1000 ガンダム 2000 仮面ライダー 3000 仮面ライダー
のような場合、非常に大変なんじゃないかという気がしてきた。
typedef struct tagListNode{
struct tagListNode *next;
char *data;
char *argv;
}ListNode;

/*first(1000 ガンダム)->(2000 ガンダム)-> (3000 ウルトラマン)-> last(4000 仮面ライダー)というリストが出来た。*/ 
/*同じ文字を持つペアを(2000 ガンダム)を消したい*/
this = first;/*最初から調べる*/
do{
if(0 == strcmp(this->argv,this->next->argv)){/*今のノードと次のノードの文字列を比較*/
if(this->next->next == NULL)/*今のノードの次の次のノードが無かったら*/
this->next = NULL;
else
this->next = this->next->next;/*次の次のノードにくっつける(2000 ガンダム)を飛ばす*/
free(this->next); /*(2000 ガンダム)を消す*/
this = first;/*(1000 ガンダム)と(3000 ウルトラマン)比較から始める*/
continue;
}
else
this = this->next; /*文字列のかぶりは無かったので次と比較*/
}while(this == NULL);


67 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 16:21:52 ]
はじめまして。
現在ステレオのwaveファイルの波形データを左右のチャンネル別々に配列に保存したいと思っているのですが、
C++どころかプログラミング自体今まであまり触れてこなかったので、ファイルの読み込み方が全く分かりません。
waveファイルのフォーマットは16bitでStereoなので、ファイルは「aa aa bb bb cc cc dd dd」のように表現されています。
まずは左のチャンネルのデータから記述が始まって、左右左右…の順にデータが格納されてます。
上の例だとaa aaが最初の左の音データ、bb bbが最初の右のデータでcc ccが2番目の左、dd ddが2番目の右です。
しかもリトルエンディアン? とかいう形式らしく、10進で10000という数字の場合なら16進で2710と表現してくれればいいのに
10 27という風に上位と下位が入れ替わって記述されているんです。
だからそれもC++で数値として扱えるように上位下位を入れ替えながら読み込む必要があります。
しかもwaveファイルの波形データを読み込もうと思った場合、ヘッダの事もあるので
純粋に波形データだけ欲しい場合ヘッダはすっ飛ばして読みこまなきゃいけないんです。

要はバイナリファイルをデータのアドレス指定をして自分の好きな場所から好きな場所まで読み込む操作をしたいのですが…。
ヘッダのバイト数とかwaveの形式とかはなんとか理解は出来たので、読み込み方がわかれば多分大丈夫だと思います。
ファイル全体を一気に読み込むのは流石に調べて分かったんですが、場所指定しての読み込みがどうしても分からなかったので
質問させていただきました。どうかよろしくお願いします。

68 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 16:31:11 ]
fseekで読みたい場所にシークするだけじゃん。
あとx86系CPUならエンディアン変換はしなくていい。

69 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 16:32:01 ]
CPUもリトルエンディアンなら、単純に2バイトずつ読めばいい。

任意の位置からの読み込みは、C++のstream類ならseekg、
CのFILE*ならfseekといった具合に、位置を指定する方法があるのでそれを使う。

70 名前:67 mailto:sage [2007/12/30(日) 16:42:45 ]
ありがとうございます。エンディアンは気にしなくて良いのですね。
あと、ファイルをシークするということは、一度ファイル全体を読み込み、
そこからシークしてデータを取り出すということですよね?
waveファイルって1つが結構大きいので、既に再生用にwaveをメモリに読み込んでいることもあり、
データをチャンネルごとに分けて読み込むうえに更に読み込み用にファイルを読み込むとなると
あとで全体のデータは破棄するにしても結構メモリ食うな〜と思うのですが、
やはりそうしないと読み込むのは無理ですかね?



71 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 16:45:14 ]
>66
}while(this == NULL);
これでいいのか?
strcmpの後のifだけど、これはたぶん、>65氏の言う「ダミーノード」の方法で消すことが可能。
「次」がある限り、「次の次」は、(ダミーかもしれないが)必ず存在する。
「次」がダミーなら、strcmpのifが真になることはないはず。

ところで、この書き方だったら比較は必ず次の要素と行われてるから、
ウルトラマンウルトラマン仮面ライダーだったらいいけど、
ウルトラマン仮面ライダーウルトラマンだったときに後ろのウルトラマンが
消えてくれない気がするんだけど、なんでこんなアルゴリズムにしようと思ったの?
普通に書いたら
・まずリストの先頭と、それ以外の要素を順に比較。かぶってたら片っ端から消去。
・次に、上の操作で出来たリストの二番目と、それ以降すべての要素と比較、かぶってたら以下略
・それをリストの最後から二番目まで繰り返す
にならない?
それともよく知らないけど>66の方が効率いいの?

あと、よけいなお節介だけど、変数名にthisとかnewとか使う癖があるなら、直した方が良い。

72 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 16:53:21 ]
>>70
シークはこれから読み書きする位置を指定する行為。
この段階ではまだ読み込みは行っていないぞ。

73 名前:67 mailto:sage [2007/12/30(日) 17:00:59 ]
>>72
そうなんですか! よく調べもせずに申し訳ありませんでした。
折角のC++なので? seekgを使ってみたいと思います。
お答えして頂いてどうもありがとうございました!

74 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:13:14 ]
>>66
>if(this->next->next == NULL)/*今のノードの次の次のノードが無かったら*/
> this->next = NULL;
>else
> this->next = this->next->next;/*次の次のノードにくっつける(2000 ガンダム)を飛ばす*/
>free(this->next); /*(2000 ガンダム)を消す*/

何をfreeしているか考えよ

75 名前:25 mailto:sage [2007/12/30(日) 17:23:42 ]
>>71,74
すいません。
有り難うございます。
ちょっと色気出してみようと思って、練習もかねてList使ってみたのが間違いだったのか?
今までList自体触った事無いから、難しい。
まぁ、趣味でプログラムやっているから気長にやります。
free(this->next); /*(2000 ガンダム)を消す*/
this->next = this->next->next;/*次の次のノードにくっつける(2000 ガンダム)を飛ばす*/
が正しいですね。


76 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:25:26 ]
今日からC言語の勉強を始めた超初心者なんですが、質問させてください。

MS-DOSでディレクトリの移動をやってたんですが、
cd \での移動と、(指定されたパスが見つかりませんと出る)
dir \での移動が出来ません(ファイルが見つかりませんと出る)

まさか入門書の本編にすら行かないうちに詰まるとは思いませんでした。
どなたか助けてください…。



77 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:28:14 ]
それC言語関係ない。
dirは移動するコマンドじゃない。

78 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:29:54 ]
>free(this->next); /*(2000 ガンダム)を消す*/
>this->next = this->next->next;/*次の次のノードにくっつける(2000 ガンダム)を飛ばす*/
freeした物のnextわ参照してどうする

tmp = this->next;
this->next = tmp->next;
free(tmp);

79 名前:25 mailto:sage [2007/12/30(日) 17:36:45 ]
>>78
そーですね。
なんか皆さんがアドバイスしてくれるから、
みwなwぎwっwてwきwたwww
なんかいい感じになってきたかも!

80 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:49:32 ]
>>76
help コマンド名



81 名前:25 mailto:sage [2007/12/30(日) 18:19:59 ]
>>71
>まずリストの先頭と、それ以外の要素を順に比較。かぶってたら片っ端から消去。
うう、駄目だ書けない。
配列だったらforで簡単に比較できるけど、
listだと最初と次とのノードと比較は簡単にできるけれど、最初と次の次や最初の次の次の次の比較が全然思いつかない。
do{
this = first; /*最初のノード*/
if(0 == strcmp(this->argv,this->next->argv)){/*最初と次のargvの比較*/
if(NULL != this->next->next){/*次の次がNULLで無かったら*/
tmp = this->next;
this->next = tmp->next;/*次の次のノードと繋ぐ*/
free(tmp);
}else{
free(this->next);/*次の次のが無かったら今比較しているノードをfree*/
}
continue;/*最初に戻る*/
}
}while(/*何が真の間whileし続けるのか書けない....*/


82 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:31:41 ]
>81

ListNode cmp,search;

for(cmp = first;cmp != dummy;cmp = cmp->next){
 for(search = first->next;search->next != dummy;search = search->next){
  if(strcmp(cmp->argv,search->argv) == 0){
  ……
  }
 }
}

これでだめ?

83 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:39:41 ]
ていうか、さ
リストに追加する段階で重複チェックすればいいじゃん
わざわざリスト全部作ってから除去しなくても。

84 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:52:00 ]
create table list (
id integer not null,
name varchar(16) not null unique,
primary key (id)
);

insert into list (id, name) values (2000, "ガンダム");

85 名前:25 mailto:sage [2007/12/30(日) 19:37:40 ]
>>82
とても良いと思います。自分は思いつきませんでした。
ListNode *cmp, *search;

for(cmp = first;cmp != NULL;cmp = cmp->next){
for(search = first->next;search->next != NULL;search = search->next){
if(strcmp(cmp->argv,search->argv) == 0){
tmp = search;
search->next = tmp->next->next;
free(tmp);
}else{
free(search);
}
continue;
}
    }
  }
どうしても分からないのは
リストの繋ぎ替えをしたとき、
search->next = tmp->next->next;
for(略;略;search = search->next){
の処理がかぶってしまうってことです。
正直continue;の使い方が分からないです。
もう駄目かもしれません。
なんか正直、何をやってもプログラムを書ける気がしなくなってきました....
こういう絶望感に包まれた場合、どうすればまたプログラムを書けるようになれますかね?



86 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:38:23 ]
>>85
Basicに乗り換える

87 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:39:40 ]
気分転換にプログラミング以外の事をする。
コンピュータから離れても良いかもしれない。

88 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:40:32 ]
>>85
だから、リスト構造はあんたには早過ぎると言ってるでしょう。

89 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:49:45 ]
>}else{
>free(search);
>}
>continue;
どうしてそうなるんだw
なぜにsearchをfreeしてしまう。
if(strcmp()!=0)なら、何もしなくていいんだよ。
あとcontinueいらない。そのcontinue何の意味もない。
continueは、ループの括弧内の、「それ以降」をすっ飛ばす意味。
括弧その次で終わってるから、全く意味がない。

>search->next = tmp->next->next;
>for(略;略;search = search->next){
>の処理がかぶってしまうってことです。
処理がかぶるならどっちか消せばいいじゃない。
それと、>82で間違えたけど、二つ目のforの初期条件は
search = cmp->next
だね。

90 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 21:19:47 ]
次の次とか処理順で頭悩ませるぐらいなら再帰にしたらどう?



91 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 00:28:51 ]
リストを試行錯誤で実現するにはまだ早いという感じだなあ。
何か本でも読んだ方がいいんじゃね。

92 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:02:30 ]
C++でグラフィックをいじるにはどうすればいいんでしょうか。

93 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:04:40 ]
唐突過ぎるとマルチうぜーとか書かれるぞ
まずなにがしたいのかを書かないとエスパーしか答えられないぞ

ゲームを作りたいならDirectXとか

94 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:05:29 ]
一人で作るレベルならC++よりCがいいと思うな、ゲームなら

95 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:10:51 ]
ここであえてJavaAppletを勧めてみる!

96 名前:デフォルトの名無しさん [2007/12/31(月) 03:29:10 ]
STDのlistやvectorの全要素を表示させる関数を書きたいのですが、
どうかけばよいのか分かりません。どうかお教えください。

97 名前:デフォルトの名無しさん [2007/12/31(月) 03:33:53 ]
size()までループさせてひとつひとつ出力

98 名前:デフォルトの名無しさん [2007/12/31(月) 03:34:09 ]
96です。
自分はこんなものを書いてしまったのですが、コンパイルが通りません。

template<class T>
void show(T& v)
{
T::iterator p;
for (p = v.begin(); p != v.end(); p++) {
cout << *p << " ";
}
cout << endl;
}


99 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:49:14 ]
>>93
DirectXとかでなく
C++で同人ゲームとかを改造して暇つぶししたいんですけど。
誰かマジレスお願いします。

100 名前:デフォルトの名無しさん [2007/12/31(月) 03:52:32 ]
>>97
こんな時間にありがとうございます!
それは書けたのですが、もうちょっと一般的な書き方があればな、、と思って。

void show(deque<char>& x)
{
for (deque<char>::iterator p = x.begin(); p != x.end(); p++) {
cout << *p << " ";
}
cout << endl;
}

こんなのよりも、dequeも<char>も勝手に入力から判断してくれる書き方はないですか?





101 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:58:53 ]
>>99
今程度の知識で暇つぶしできるほどの改造は無理だ。
どのゲームなのか?そのゲームがC++で書かれているのかすらわからないじゃないか。
っつうかマルチでしょ?
宿題スレで標準関数にグラフィックをいじるような関数は提供されていないっていったじゃんか。

102 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 03:59:33 ]
>>98
typename T::iteratorじゃない?
ってかエラーが出たらエラーメッセージを張るべし。

103 名前:デフォルトの名無しさん [2007/12/31(月) 04:10:07 ]
>>102
ありがとうございます。
typenameをつけたら希望どおりの動作になりましたが、その後、
エラーメッセージを張ったら、実はそこに書いてありました。

$ g++ samp20.cpp
samp20.cpp: In function 'void show(T&)':
samp20.cpp:9: error: expected `;' before 'p'
samp20.cpp:10: error: 'p' was not declared in this scope
samp20.cpp: In function 'void show(T&) [with T = std::list<int, std::allocator<int> >]':
samp20.cpp:23: instantiated from here
samp20.cpp:9: error: dependent-name 'T::iterator' is parsed as a non-type, but instantiation yields a type
samp20.cpp:9: note: say 'typename T::iterator' if a type is meant



104 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 04:16:18 ]
日本語が変だぞwとりあえず解決でOK?
あと、細かいことだけどこういう処理ならconstつけといた方がいい。
template<class T>
void show(const T& v)
{
for (typename T::const_iterator p p = v.begin(); p != v.end(); p++) {
cout << *p << " ";
}
cout << endl;
}

105 名前:デフォルトの名無しさん [2007/12/31(月) 04:26:50 ]
>>104
解決です。
すいません、あと1つだけ。
constつけた方がいい理由は、show()関数が表示するだけで
内部要素を変更しないことをハッキリ示すためですか?


106 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 04:36:05 ]
htmlファイルからリンクのURLだけを抜き出してその文字列を変数に入れたいん
ですがどのようにすればいいでしょうか?
getlineで一行つづ読み込んで"<a href="http:"を探せばいいかな。と思ってたんですが
メモ帳でスレのhtmlファイル開いてみるとURLの途中で改行があったんで悩んでます

107 名前:デフォルトの名無しさん [2007/12/31(月) 04:37:38 ]
いちどによみこんで整形する 改行や空白をなくす

108 名前:デフォルトの名無しさん [2007/12/31(月) 05:52:34 ]
gccで変数名を表示できる拡張機能ってどう書くんだっけ?

109 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 08:21:41 ]
>>105
const参照でコンテナを受け取った関数から使えなくなってもいいならつけなくていいよ。

110 名前:デフォルトの名無しさん [2007/12/31(月) 09:06:53 ]
後置演算子++のオーバーロードについて質問です。
Type operator ++(int)とありますが、
クラスTypeで宣言した演算対象が、float型とかの場合でも
仮引数は(int)なのでしょうか?
(float)にはならないでしょうか?
どの解説本みても(int)で、詳しい説明がなくてよくわかりません。




111 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 09:13:20 ]
まあfloatをインクリメントって普通しないからね。
オーバーロードしたいならもちろんfloat型を引数に。

112 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 09:20:36 ]
わざわざそんなんせず1足してやる方が無難な気がするけどねぇ

113 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:18:50 ]
T& operator++(void)じゃなくて?


114 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:01:19 ]
>>113
それは前置

115 名前:25 mailto:sage [2007/12/31(月) 11:07:00 ]
(;つД`); うわーん
ふて寝して、それでも気になって、紙にリスト書きながら、いろいろやってたら、
うまく行ったポイ!
変なのところが有ったら指摘してください。
それとdummyリストは便利!
ListNode *cmp, *search, *tmp;
for(cmp = first;dummy != cmp ;cmp = cmp->next){
for(search = cmp->next;dummy != search ;search = search->next){
if(dummy == search)
break;
if(0 == strcmp(cmp->argv,search->argv)){
tmp = search;
tmp->next->prev = tmp->prev;
tmp->prev->next = search->next;
    }
  }
}
頑張ってよかった!
感動した!
いい気持ちで正月を迎えられます。



116 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:25:11 ]
それにしても混同しそうになる

117 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 15:45:29 ]
サーバソケットでTCPの10〜100バイトの可変長データを受信する際、
そのデータのレングスが先頭2バイトにある識別子で判断できる場合って

・まず先頭2バイトをrecvする。
・識別子を判断して残りのバイト数をrecvする

というのが一般的なのでしょうか?

recvの第3引数に1500バイトくらいの十分余裕な値を指定すると
勝手に1データの終わりを検出してリターンしてくれるものなのでしょうか?

要は連続してデータが飛んでくる場合に
1データの区切りをrecv1回で済むのか、2回に分けないといけないのかが
知りたいです。



118 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 15:54:11 ]
>>117
こっちのがいいと思う
ネットワークプログラミング相談室 Port20
pc11.2ch.net/test/read.cgi/tech/1186418855/

119 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 15:58:50 ]
>>118
サンクスです。逝って来ます。

120 名前:デフォルトの名無しさん [2007/12/31(月) 16:49:41 ]
char bun[] ="すごく長い文章が入っている";

FILE 構造体へのポインタしか受け取ってくれない関数に,
この文字列があたかもファイルに入っているかのように
思わせて処理させることはできないものでしょうか?

C++ ならいつも std::string と std::istringstream で
ストリームとして抽象的に処理しているのですが,
どうしても C のライブラリを使う必要があって,
勝手が違って悩んでいます.




121 名前:120 [2007/12/31(月) 16:57:40 ]
標準的な方法ではできないようですね.
使いたいライブラリのソースが手に入って,
手を突っ込んでいいとのことなので素直にそうします.

いやぁ,ストリームなんて変な演算子オーバーロードで
やだなぁ,とか思っていたのにいつの間にかストリーム
べったりの人間になってました.慣れって怖い.

122 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 17:04:49 ]
>>120
テンポラリファイル作るとか?
ファイルマッピング使って、バッファーの不一致が起きないようにファイルをクローズしてフラッシュするまでタイミングを取るとか?

123 名前:デフォルトの名無しさん [2007/12/31(月) 17:22:09 ]
質問です、VC2005で、多重継承のクラスを作ってるのですが
ランタイムエラーが出てしまいました。
(0xC0000005: 場所0x00000010を読み込み中にアクセス違反が発生しました)

デバッガの自動変数の欄にはthisポインタのみ載っていて(値は0とかではなく、
ちゃんとしたアドレスっぽい)、thisポインタの「+」をクリックして展開すると
「CXX0030: エラーです: 式を評価できません」
となっています。

hoge0---hoge1---hoge2---hoge3---hoge4
                     ---hoge5
                     ---hoge6---hoge7
                           ---hoge8
↑のような感じで継承して(全てvirtualをつけて継承してます)、
最後に2,4,5,7,8を多重継承してhogerableクラスを定義して、
そのインスタンスを生成して使っています。
2や4578で実装されている仮想関数(f())をhogerableクラスでも実装し、
そのときの条件によって
return hoge5::f();
とかやろうとしたのですが、
hoge5::()f に飛んだときは正常に動くものが、hoge7::f() に飛ぶとランタイムエラーが
起こりました。
hoge7::f()の中は
if (!hoge2::f())
  return false;
if (!p)         // ここでエラー。pはhoge3にあるメンバ
  return false;
となっています。
こういうときは何を疑えばいいのでしょうか?
よろしくお願いします。

124 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 17:25:53 ]
hoge3のインスタンスがたくさんできてる予感

125 名前:123 mailto:sage [2007/12/31(月) 17:51:13 ]
すみません、言われてから一番下のクラスを見直したら速攻で解決しました、
最後の多重継承にvirtualをつけてませんでした(汗
けどどういう条件でvirtualをつけるべきなのかよくわからない・・・
ともあれありがとうございました。

126 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 18:28:52 ]
そもそもそこまでの多重継承になるなら設計がおかしいのでは。

127 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 18:52:38 ]
>>126そだね。多重継承も使いすぎると良くないね。
俺も、多重継承やテンプレートを使いまくって複雑怪奇なオブジェクトを作っていた頃がありました。しかし、だんだんとこんな複雑な構造は不要だって解ってくるんだな。
C++をはじめて誰もが一度は通る道かな。


128 名前:デフォルトの名無しさん [2007/12/31(月) 19:47:15 ]
>>101
もうちょっと具体的に書くと、
if(Char_Trans[0]!=0){
SetDrawBlendMode( DX_BLENDMODE_ALPHA , Char_Trans[0] ) ;
if(LoadCharName_BC[0]!='\x00'){DrawGraph(Draw_X+160,Draw_Y,CHAR_BC_Handle,TRUE);}//キャラを立たせる。奥中央
}
このランダム部分を変える方法はありますかね?

年末に何やってるんだ俺はorz

129 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 19:54:40 ]
>>128
生きろ

130 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 20:40:17 ]
>>128
どの辺がランダムなのか教えてくれ。



131 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 20:44:54 ]
>>128
エスパーするとDraw_XとDraw_Yを直接数字に置き換えるとか

132 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 20:46:00 ]
#define Draw_X (rand()/800)
#define Draw_Y (rand()/600)

133 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 22:41:31 ]
>>110
仮引数はどうあっても int 。

134 名前:デフォルトの名無しさん [2008/01/01(火) 21:05:24 ]
C++を勉強したいのですが
初心者向けで分かりやすい本があったら 教えて下さい。

Cはある程度は把握してます

何かお勧めの本はありますかね?

135 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:18:23 ]
>>134
ロベールでいいんじゃね。

136 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:55:51 ]
Accelerated C++とか。

137 名前:デフォルトの名無しさん [2008/01/01(火) 23:08:21 ]
やさしいC++
とかって 分かりやすいんですかね?

138 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:10:37 ]
>>137
基礎過ぎて C と被る所が多過ぎる。

139 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:13:44 ]
>>134
CとC++はかなり違う言語だから、なめてかからないほうがいいよ。
STLやらBoostやら、C++は変態すぎる。

140 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:16:00 ]
かなり違う言語だけど、慣れれば簡単なもんだ。
いい本を選べよ。



141 名前:デフォルトの名無しさん [2008/01/01(火) 23:40:20 ]
分かりやすい本とかお勧めの本は
やっぱりそれぞれ違いますよね?

ロベールかぁ..

本屋でいろいろ立ち読みしてみて 読みやすい本を選ぶのがいいんですかね?

142 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:45:23 ]
>>139
C++がCより使いやすい要素はあるんですかね。

143 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:48:51 ]
「使いやすい」の定義によるんじゃない?
初心者に勉強させるって意味なら混乱する要素満載でとても使いやすいとは思えないけど

144 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:54:42 ]
>>142
クラス。
iostreamなんかは窓から投げ捨てていい。

145 名前:デフォルトの名無しさん [2008/01/01(火) 23:58:01 ]
STL

146 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:00:19 ]
>>142
C++は使いやすいというよりも、強力な言語だと思う。強力であるが故に使いこなすのが難しい面が多々ある。
例えば文字列クラスを作ると、最初から言語仕様に組み込まれていたかのように文字列を扱えるなんて、強力というか自由度高すぎ。


147 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:05:47 ]
>>140
MPLとかも簡単と思う?

148 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:07:56 ]
例外処理も地味に便利だよなあ

149 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:19:19 ]
演算子オーバーロードとか例外とか最近の言語なら珍しくないって。

150 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:24:45 ]
STL と参照があるだけで C より随分楽になるわ。



151 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:25:30 ]
>>147
使わんし。

152 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:15:12 ]
>>149

C++で成功したから、最近の言語で実装されるようになったんだろ。


153 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:30:02 ]
例外はJavaが早くね?他にもあるかもしれんが・・・

154 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:30:17 ]
>>151
MPLを使わないのにC++に慣れてるとか大きく出たね
それでC++が簡単と言うのは違うんじゃないかい?
あんたにとっては簡単かもしれんけど、一般論ではないわな

155 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:38:48 ]
>>151
何私は最先端ですみたいになってんの?
あんなもんライブラリでも作る必要がなければ使わない。
使えない。可読性が低くなる。

156 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:50:28 ]
ライブラリ作らないでプログラムしてるのはすごいな
MPLより"やばい"type_traitsがtr1に入ってるぞ

可読性が低い==俺は勉強してないので読めない

157 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 04:03:21 ]
mplってboost?

158 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:45:53 ]
水掛け論したいなら他でやれ。


159 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 11:51:00 ]
pc11.2ch.net/test/read.cgi/tech/1197132472/659

このプログラムが先日まで実行できたのですが、
probably corrupted stack
segmentation fault

と出て実行不可になりました。こちらの環境が原因でしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:19:23 ]
プログラムがおかしい。



161 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:54:26 ]
>>156
type_traitsのどこがやばいの?traitsの考え方は難しくないし
コンパイル時の型の判定は便利だからboost使っている。
今でもiterator_traitsやchar_traitsはある。

>可読性が低い==俺は勉強してないので読めない
就職したら正論が通用しない場合があることがわかるよ。

162 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:54:58 ]
>>159
とりあえず、 ,とか?とか使うのやめて読みやすく書き直して味噌

163 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:57:50 ]
>>159
負数または INT_MAX を超える値を入力してない?

164 名前:159 mailto:sage [2008/01/02(水) 13:05:17 ]
実行時のコマンドが誤ってました。お騒がせしてサーセン

165 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:05:56 ]
>>159
宿題丸投げした挙句デバッグも人任せ?お前の肩の上についている物体は飾りか

166 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:22:34 ]
>>165
なんでそんなムキになるん?

167 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:23:46 ]
ムキっていうかうざくなるのは当然

こんなんみりゃ誰だってうざくなるわ

168 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:24:12 ]
>>165
肩の上って…
首を傾げてるってことかあぁぁ!!!!!!111

169 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:24:51 ]
こういうのは真性だからねぇ、わざわざ言わずにスルーだな

170 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:24:52 ]
まあ根っこからこういう奴っているんだよな、治らないよ、小さい時の教育の問題だろう



171 名前:165 mailto:sage [2008/01/02(水) 13:29:09 ]
ゴメン言い過ぎた。
今度から気をつけるよ。


172 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:31:29 ]
こういうのを見て毎回思うことは、
宿題スレと質問スレの住人、絶対かぶってるよな

173 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:45:12 ]
うん

174 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:26:46 ]
誰も>>159のプログラムが間違ってることは指摘してやらないんだなw

175 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:36:16 ]
strcatのcatって何の略ですか?

176 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:38:05 ]
>>175
ja.wikipedia.org/wiki/Strcat

177 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:41:47 ]
GoogleでもYahooでもどこでもいいから、検索して最初の10ページくらいは見て欲しいな
そもそも検索したかどうか知らないけど

178 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:45:36 ]
どうでもいいが、>>176のバッファオーバーラン対策コードはsを初期化しているかが曖昧だから不完全だ。strlen(s)がsizeof(s)を超える場合がある。


と思った。

179 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 17:07:02 ]
初期化されてなかったら、それはバッファオーバーランとは別問題だろ
strcpyとかならまだしも、catは連結なんだから初期化前提

180 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 17:10:55 ]
中途半端に"〜.ex"とかになった場合に誤動作しそうで怖いな
また別の問題だけど



181 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 20:10:17 ]
C++でなにか簡単に動くプログラムはないだろうか。

182 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 20:12:22 ]
はろーわーるど

183 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 20:50:40 ]
マージャン、囲碁、将棋、チェス、好きなのを選べ。

184 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 20:51:46 ]
はっきり言ってboostより分かりやすいC++はないんだろうか。

185 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:45:24 ]
boost分からなければ無理に使うことは無い

186 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:53:09 ]
boostってそんなにわかり易かったかな?
lambdaとか。

187 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:57:51 ]
lambda はともかく、半分以上は分かりやすいと思うが。

188 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:59:41 ]
boost::spiritは必見

189 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 22:35:49 ]
とりあえず使い方を覚えて便利さを享受すること
にしてる。中身は天才達が作ってるだろうから。
for_eachでのlambdaは秀逸だと思う。bindも
凄く使いやすい。

190 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:06:23 ]
便利だけど特別分かりやすいとは思わなかったな



191 名前:デフォルトの名無しさん [2008/01/03(木) 02:28:18 ]
#include <fstream>
using namespace std;

int main()
{
ofstream fout("mydata.mid", ios::binary);

fout.write("4D 54 68 64 00 00 00 06 00 01 00 01 00 60 4D 54 72 6B 00 00 00 1C 00 90 3C 64 4B 80 3C 64 15 90 3E 64 4B 80 3E 64 15 90 40 64 4B 80 40 64 15 FF 2F 00", 74);

fout.close();

return 0;

}



fout.write の引数のバイナリ(SMF)をそのままファイルに出力したいのですが、
出力されたsample.midを再生しようとすると「プレーヤーがそのファイルの種類をサポートしていないか、そのファイルの圧縮に使用したコーデックをサポートしていない可能性があります。」
というエラーが出てしまいます。そのファイルをバイナリエディタで見てみると、34 44 20 ...
というように、バイナリが変わってしまっていました。何がいけないのでしょうか??

192 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 02:33:16 ]
16進の文字列から数値に変換→書き込み
でおk

193 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 02:45:32 ]
>>191
static const char data[] = {0x4D, 0x54, 0x68, /*中略*/, 0x00, };
fout.write( data, sizeof(data) );

194 名前:デフォルトの名無しさん [2008/01/03(木) 02:58:56 ]
これからは開発文字コード体系を
UTF−16ベースにしないと
プログラマーから嫌われそうだ


195 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:18:40 ]
>>192
>>193

なるほど。こうすればよかったんですね。ありがとうございますm(_ _)m

・・なんか、いきなりあれですが。
今まで他の質問サイトでよく質問してたんですが、ここの方が返信早いし、
しかもここの人たちはポイントもらうためとかではなく無償で教えてくれるんですよね。。
なんかしんみり嬉しくなりました。また行き詰ったらご教授願いたいのでよろしくお願いしますm(_ _)m

196 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 07:12:59 ]
www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88

197 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:59:39 ]
>>193
なんで、staticなんですか?

198 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:04:30 ]
>>197
よそから使う必要がなければ、見えなくするためじゃないか。


199 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:09:46 ]
>>197
定数にするためじゃない?

200 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:16:31 ]
>>198
いえ、なんてーか、グローバル変数でstaticなら、それも理解できるんですが……
これ、関数内の話ですよね?

>>199
それって、constじゃないんですか?



201 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:35:24 ]
>>200
constだけだと関数内では「書き換え不能」って意味だけじゃないかな?
staticがついて定数になったと思うけど。



組み込みなんかだと値をROMに収めるためにはstatic constを指定してやらないと駄目だったような・・・
C++が使える組み込みなんて少ないかもしれないけど

202 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:36:40 ]
んーとねstaticはスタック上に領域確保するのを防ぐ狙いがあったよーな
確保した領域に値をコピーする手間が省けるのでメモリと処理時間の節約になるっぽい
スコープが関数内に限られた外部変数って考えるといいっしょ
でもmain関数内の変数ってコンパイラにもよると思うけど実質staticじゃなかったっけ?

203 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:07:50 ]
私の理解が間違っているかもしれませんが……一応確認

int main()
{
    ofstream fout("mydata.mid", ios::binary);
    const char data[] = {0x4D, 0x54, 0x68, /*中略*/, 0x00, };
    fout.write( data, sizeof(data) );
    fout.close();

    otherFunction();

    return 0;
}

みたいな形で書いたとしたら、当然、otherFunctionから、dataにアクセスすることは出来なくなるわけですから、外部から使う必要云々の話ってのは成立しませんよね。
なので、>>201さんの言う事(前半)が理由なら、staticはいらないのではないでしょうか?

>>201(後半)と>>202の理由については初めて知りました。
よろしければ、参考文献などを教えていただけないでしょうか?
お願いいたします。

204 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:23:42 ]
>>203
書き換え不能の「変数」と「定数」の違いがある気がすると思って書いたんだけど。
そこまで詳しくないから間違ってるかも。

Googleで「c++ const 定数」あたりでぐぐれば?

205 名前:193 mailto:sage [2008/01/03(木) 16:27:08 ]
組み込み屋なので、こういう場合static const にしちゃうんだよな。
>>201>>202(最後の1行はよく知らないが)の言うとおりだよ。

非static 非const →書き換え可能でスタックに配置。関数に入るたびに、ROMからスタックへのコピーが発生する。
非static const →書き換え不能でスタックに配置。関数に入るたびに、ROMからスタックへのコピーが発生する。(処理系により異なるかも?)
static 非const→書き換え可能な静的領域に配置。プログラム開始時に一度だけ、ROMから静的領域へのコピーが発生する。
static const →書き換え不能でROMに配置。コピーは発生しない。

206 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:27:11 ]
>>203
staticが外部からアクセスできないんは文法上の話
メモリ上に変数の領域が確保されてるんやからアドレス渡せばアクセスできるんよ

207 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:40:08 ]
>>204-206
なるほど……色々と教えてくださってありがとうございます。
どうも、組み込み系の話が必要になってきそうですね。
そこら辺の文献でも読んでみます。ありがとうございました。

208 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:56:44 ]
このスレには滅多に書き込まないけど、ずっと読んでる。
ホントためになる話が多いよな。各人の知識経験に感嘆するぜ。

209 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:24:02 ]
初心者向けのCの本を一冊読み終わり、問題もだいたい解けるようになりました。
次に難し目の問題集を買って、それをクリアーしたらC++に移ろうと思います。

しかし、本を読んで理解して・・・の繰り返しでモチベーションが萎えて来ました。

僕は独学でパズル感覚でプログラミングの勉強をしているので
CあるいはC++を使ったら何が出来るのかということが、ちょっと想像がつきません。

そこで

■ この言語で何(どういうモノ)が作れて、
  現実にはどういう場で役に立っているのかというのを教えていただきたいと思います。

よろしくお願いします。

210 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:35:47 ]
C/C++は汎用性高すぎて組み込みからサーバ、GUIアプリケーションまで色々としか‥‥

とりあえず「こんなソフト欲しい」って思ったら自作してみるといいお



211 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:37:29 ]
>>209
何ができるのかというと、何でもできるということになる。
目標がC/C++の勉強だけだと気力も萎えるだろう。そういう時は、何でも良いからアプリを作るのが一番。

212 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:41:50 ]
ここで言ってる組み込みって
www.sophia-it.com/content/%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
ここに書かれているような意味でですか?

汎用性高いとのことですが家電製品とかのシステムもC/C++で書かれていたりするんですか?

213 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:43:39 ]
釣りな感じもするけどまぁいいか。

実用的なプログラミング言語だと、言語によってできることできないことにはほとんど差がない。
どちらかというと環境の差だったり環境が用意されているかの違いの方が大きい。
なので、コンピュータ上でできることはほぼ何でもできる、と言ってよい。
でも、これだとあまりうれしくない返答だよな。

どれだけ低レベルな処理が可能かというのについては多少差があるけど、C / C++ はその方面では強い。
具体的には、オペレーティングシステム(Windows とかね)や、組み込み系(電子機器の制御、マイコン等)の
プログラミングに使われたりもする。
逆に言うと C / C++ そのままだと基礎的すぎて、ライブラリとか使わないと凝ったこと、派手なことはさせにくかったりする。

ということで、提案としては、
・OpenGL, DirectX とか使って、ゲームとか 3D CG 系で遊んでみる。
・(英語があまり苦にならなければ) online-judge.uva.es/problemset/ で問題を解いてみる。
(ACM国際大学対抗プログラミングコンテストの問題集でオンラインで判定もしてくれる)
あたりかなぁ。あるいは宿題スレの回答者になってみてもいいかもしれないよ?

214 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:44:18 ]
>>209
本を読んで理解することは非常に重要だが、実際に組んで動かしてみるのはもっと重要。
理解を深める意味でも、モチベーションの意味でもな。

あと、言語だけでなく、データ構造とアルゴリズムの勉強は欠かさないように。
パズル感覚なら楽しめるはず。実践の題材を見つけることもできると思う。
題材はGUIアプリで見た目にこだわるより、
CUIでいいから、内部動作にこだわると良い。

215 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:47:48 ]
>>212
C++が使える環境ではC++で書きたいな。(あくまで希望)

216 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:48:10 ]
言語を覚えたからどうこうというのがそもそもおかしい
何か目的があって言語を覚えたんじゃないのか

217 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:48:14 ]
Gotwを見るとか

218 名前:デフォルトの名無しさん [2008/01/03(木) 18:29:23 ]
CSVファイルから各行を読み込んでベクターに入れ、それをさらに大きなベクターに
いれる処理は以下でよいですか?
なんか、strtok()を使うやり方があるとか、','を'\0'に置換したらいいとか言われましたが、
よく分からなかったので、以下のように書いてみました。


vector<string> vec;
vector< vector<string> > vec2;
ifstream ifs("ファイル名文字列");
string line;
while (ifs >> line) {
int s1 = 0;
int s2 = 0;
while (s2 < line.size()) {
s1 = s2;
while (line[s2] != ',' && s2 < line.size()) s2++;
vec.push_back( line.substr(s1, s2 - s1) );
s2++;
}
vec2.push_back(v);
vec.clear();
}

219 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 18:45:48 ]
>>210
>>211
ありがとうございます。

アプリを作る方向で考えてみます!

>>213
ありがとうございます。
英語は、雰囲気でわかりますw
実践的な問題を解いてみるのは、楽しいと思います。
頑張ります。

>>214
ありがとうございます。
データ構造やアルゴリズムは、読んでて楽しいのでどんどん勉強したいと思います!

>>216
いや、暇つぶしです。
今、フリーター〜無職なんで、何かやってるアピールを親にしないと・・・
哲学とか、医療問題とか、どうでもいいものをいろいろ勉強してました。
昔、ウェブサイト作ってFLASHのACTION SCRIPTやJAVA SCRIPTとかをいじるのが好きだったんで
全く違うけどパソコン関連ってことでCをやってみたら楽しかった・・・って感じです。






220 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 18:47:01 ]
>>217
何やらヒゲのおじさんが微笑んでますが
参考になりそうなサイトですね。読んでみます。
ありがとうございます。



221 名前:デフォルトの名無しさん [2008/01/03(木) 20:03:21 ]
質問させてください。
当方、すでに出来上がっているプログラムに追加・改変して別のプログラムを作るという授業を受けている学生です。
VisualStudio2005、C++で開発しています。
ちなみに、授業を受けている割にはC++についての知識は皆無です。

今作っているのはノベルゲームのような物です。
文章を表示して、キーを入力すると次の文章を出力する、という動作を行いたいのですが、キーの入力を受け取ると、文章が一気に進んでしまいます。
これを防止する為にキーが入力されても一定時間無視するという処理を行いたいのです。

そこで皆様にお聞きしたいのですが、キーの入力(OnKeyDownで取得)を一定時間(例えば10ミリ秒)無視するためにはどのようにプログラミングすれば良いのでしょうか?

わかりにくいかと思いますが、どうかよろしくお願いします。

222 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:15:46 ]
>>221
フラグ立てればいい

223 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:16:25 ]
if( 一定時間 != true )
{
キー入力;
}

224 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:17:33 ]
そもそも一気に進んでしまうのがおかしいのでは

225 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:19:32 ]
何をクラスにしたらいいのかの指針をください

226 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:21:02 ]
何をしたいのか書かないとエスパーじゃなきゃ無理w

227 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:38:21 ]
>>225
類似オブジェクトの共通特性を抽出してクラスにすればいい

228 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:43:50 ]
「押されているかどうか」ではなく、「押された瞬間」を検知すれば、そういうことは無くなる。
>222も参考に、その方向考えてみたらどうかな。





229 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:51:25 ]
>ちなみに、授業を受けている割にはC++についての知識は皆無です。

ここに誰もつっこまないのは何故だ・・・
教えようがないじゃん

論述形式の宿題とか?

230 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 20:54:33 ]
>>229
そういうもんじゃない?
情報学科卒の生徒にHelloWorldから、とまでは言わなくても、
それに類する所から始めないといけない現実。



231 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 21:57:16 ]
すでに出来上がっているプログラムって吉里吉里みたいな仕様になっているのか?
なんかよくわからんけどソースうpしてくれなきゃわからん

232 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 21:59:30 ]
今日はものすごく調子が悪くてとても
C言語について調べる気がしないんですが。
誰かレスお願いします。

233 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:01:06 ]
>>232
お前はなんについて質問したんだよw

234 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:04:47 ]
www.imgup.org/iup531850.jpg

235 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:12:54 ]
>>233
何かを限られた時間で作るときの目標として
ゲームにこだわる必要はないんですかね。


236 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:19:07 ]
>>235
どこから「ゲーム」が出てきたんだ?
エスパーで答えれば
好きにしろ、人に聞くな、目標を立てるところからが勉強だ。

237 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:20:24 ]
人生相談スレではありません。

238 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:22:57 ]
ゲームといえば、ライフゲームとスタートレックかな。


239 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:21:54 ]
>>212

>家電製品とかのシステムもC/C++で書かれていたりするんですか?

Cがほとんどだと思う。
ある程度メモリとCPUパワーに余裕があれば、C++も選択肢になるだろうな。


240 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:36:44 ]
組み込みはC++が多い



241 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:56:36 ]
組み込みC++ってそんな贅沢させてくれるのか?

Cがほとんどじゃまいか?

242 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:02:54 ]
今は組み込みも(全体的に)だいぶ性能上がってるんじゃないか

243 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:09:06 ]
コンパイラさえ対応していれば使うよ。
コストなんてどちらにせよコード次第。

244 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:28:37 ]
組み込みは一回しか経験したことないけど、一応C++だったな
でもnewを使わなかったし、ベターCって使い方だったけど・・・

245 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:31:15 ]
組み込み全く知らんのだけど、newを使わない事による組み込み的なメリットって何かあるのかね?

246 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:33:44 ]
例外処理省いてバイナリをコンパクトに出来るとかそのあたりかね
newは例外投げるし。

247 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:34:11 ]
性能は大分上がってるけど、16bit環境も珍しくないからな。
8bitは流石に見なくなったが。(やってるところもあるだろうが。)

C++でやるかどうかは、コストよりも政治的な要素が強い希ガス。
MDAツールが使える、といった明確なメリットがなければ、
Cで押し切られそうだな。



248 名前:212 mailto:sage [2008/01/04(金) 00:43:39 ]
むーそうだったのですか。
ハードウェア言語?とかいうのを使っているのだと思ってました。
ありがとうございますm(_ _)m

249 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:52:48 ]
>>245
メモリが少ないのでヒープが小さくなる。その結果newに失敗する可能性があるとか
リアルタイムが要求される場合に遅いとか?


250 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:59:08 ]
>>245
普通のnew/deleteは、空き領域の断片化によってメモリ不足に陥る可能性がある。
例外はコンパイルオプションいじらないと普通は投げないんじゃないかな。

代替策として、静的確保した領域にplacement newしたり、
断片化しないように制限を付けたメモリ管理を取り入れたりと、工夫してる。



251 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:06:50 ]
携帯電話みたいにOSが入ってる環境ならnew(mallocも)とか使うだろうけど
IOから自分で実装するような組み込みならまず使わないと思うよ。
環境によっちゃRAMやスタックの使用量を監視しながらデバッグすることだってあるし。

252 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:10:51 ]
C++で組み込みっつったらBREWとかしか思いうかばんなぁ

253 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:31:05 ]
>>252

組込みのソフトが何で開発されたか、なんて普通表に出てこないから。
詳しくは言えないが、おまいらの目に触れるところで
C++(全部ではないが)使って作られたもの知ってるよ。


254 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 05:42:17 ]
日立(ルネサス)のはC++コンパイラだったな

255 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 10:49:14 ]
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132
pc11.2ch.net/test/read.cgi/tech/1190261457/
からの誘導で来ました。

===========

仕様:
1. UNIXのcronみたいに特定の時間になるとある処理を実行させる
2. そのプログラム自体はdaemonとしてずっと走り続けている

こういうことをLinux上でやりたいんですが、
sleepかalertを使って、
希望の時間になったかを調べ続けるしかないですかね。
何か普通はこうやるよってのあります?

1分に1回温度を測定するプログラムです。

256 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 11:15:11 ]
現在の時刻を取ってきて、Sleepで寝かせる時間を計算すれば良いんじゃないかな。

257 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 11:18:46 ]
>>255
cron使うわけにはいかないの?
どうしてもプログラム内で完結したいなら、alarm()かsetitimer()だろうね。sleep()でもできなくはないけど。
残念ながら、alert()なんてのは知らん。

258 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 11:19:15 ]
>>256
Sleepってなんですか?

259 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 11:35:19 ]
>>256-257
レスありがとうございます。
やっぱりそうなりますか。
alertじゃなくてalarmでした。

260 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 12:11:27 ]
そもそもcronのソース読めばいいじゃないか



261 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 12:19:00 ]
それはめんどくせえじゃん

262 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 13:27:42 ]
そもそもcron使えばいいじゃないか。

263 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 14:51:41 ]
>>255
引っ越す前から見てるんだけど
時間の分解能を定義してないのはなぜよ?

sleep とか alam でやれば当然誤差累積だし…

精度とか確度とかって数学の時間に習わなかったか?


264 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 15:09:03 ]
何で偉そうなの?

265 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 15:19:32 ]
>>263
些末な問題だから。

266 名前:255 mailto:sage [2008/01/04(金) 17:22:32 ]
>>263
引っ越し前からの長期に渡る応援ありがとうございます!

精度は1秒あればOKです。
sleepにせよ、alarmにせよ、
仕掛ける前にtime_tを取ってきて、
それから逆算してやろうかなと思っててわざわざ書きませんでした。

数学は得意です。
自分で微分を発明しました(`・ω・´)シャキーン

267 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:39:02 ]
ライプニッツもしくはニュートン乙

268 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 18:13:59 ]
凄い奴が書き込んでたんだな。しかも前スレから。

269 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 18:45:21 ]
>>263
どこに引っ越したんだ?

270 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 19:44:39 ]
いや、>255が他のスレから移動してきただけのことだろ。



271 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:46:06 ]
度忘れしてしまったので助けて

引数にポインタをとる関数があるのだが
このポインタのアドレスを自動変数のものに書き換えるのはNG
このポインタに自動変数を代入するのはOK
でいいんだよね

272 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:49:55 ]
>>271
ごめん、読解できない

273 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:53:50 ]
寝ぼけてるから日本語でokになってしまったorz

a(int* p)
{
int local = 10; //適当

p = &local; //NG
*p = local; //これはどうだったっけ?
}




274 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:59:04 ]
>>273
//これはどうだっけ?
OKだよ。    ってか、なんでこの程度の事が分からん。

//NG
これの理由は説明できるか?

275 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:00:36 ]
>>273
*p = local; //これはどうだったっけ?

問題ない
pの指す領域に10の値が代入される


pがもつ10の値と、localが持つ10の値は、それぞれ別の領域に格納されている状態になる

276 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:01:11 ]
よくわからんが混乱してしまった、最近疲れてる予感orz


あれだ、auto変数は関数から脱出した瞬間ナイナイされちゃうからな
するとポインタpは意味の無いところを示してしまうのでエラーになるんだ

277 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:12:09 ]
>>274-275
説明ありがとう
今日はもう休もうorz

278 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:30:54 ]
文字列から指定の文字列を省いて他の変数へコピー
例えば
文字列が入った変数 MOJI[]="aaabbbccc\0" 指定の文字列="bbb"だと
MOJI→他の変数へaaaccc\0をコピー
できれば
aaabbbccc→ポインタ使ってMOJI自身をaaaccc\0に
ってしたいんだけど、どのようにすればいい?

279 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:35:58 ]
ドゥアブルポイントゥアァァァァ

280 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:57:36 ]
strstrでbbb探してbbbのに続くバイトをヌル文字まで一文字ずつ前にコピー



281 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:04:56 ]
void func(char * a, char const * b)
{
if (a == NULL || b == NULL || a[0] == '\0' || b[0] == '\0') return;
char const * p = strstr(a, b);
if (p == NULL) return;
char tmp[strlen(a) + 1];
sprintf(tmp, "%.*s%s", p - a, a, p + strlen(b));
strcpy(a, tmp);
}

char MOJI[] = "aaabbbccc";
char * b = "bbb";
func(MOJI, b);

但し、"aaabbbccc\0"はナンセンスなんで"aaabbbccc"に変更済み

282 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:06:01 ]
>一文字ずつ前にコピー
馬鹿がいる。
>char tmp[strlen(a) + 1];
c99使いがいる。
# つーか、一時領域要らないだろw

283 名前:281 mailto:sage [2008/01/05(土) 09:10:17 ]
>>282
確かに一時領域要らなかった。

>>278
ってことで、訂正。これでc89でも大丈夫。
void func(char * a, char const * b)
{
if (a == NULL || b == NULL || a[0] == '\0' || b[0] == '\0') return;
char const * p = strstr(a, b);
if (p == NULL) return;
strcpy(p, p + strlen(b));
}

284 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:13:58 ]
>>283
いや、未だc89じゃ通らないし。つーか、char const * pじゃなくてchar * pだろよ。

285 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:28:25 ]
>>283
strcpyでコピー範囲が重なってるから動作が未定義になるぞ。

286 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:35:26 ]
さらに指定の文字列は複数回出現する可能性も有るから・・・
さらに言えば指定文字列を取り除いた後に前後の文字列がくっついて取り除くべき指定文字列になる可能性も。
ex. aabbcからabを取り除くとabcになって再度abが出現。

287 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:05:44 ]
ありがとうstrlen使う発想がなかったから助かりました
実はURLからime.nu/を消したかっただけなんでこんな感じでまとめたみた

if(NULL!=strstr(url,"ime.nu/")){
char *buf;
buf=strstr(url,"ime.nu/");
url[strlen(url)-strlen(buf)]='\0';
buf+=strlen("ime.nu/");
strcat(url,buf);
}

288 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:27:58 ]
strcatも未定義動作になるから止めれ。

289 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:18:35 ]
>>276
ポインタpも関数から脱出した瞬間ナイナイされるので安全。

290 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:21:28 ]
strcpy()で、前方への移動ができない実装ってあるんかいな。
未定義には違いないけど。



291 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:10:38 ]
>>273
>p = &local; //NG
これもOKだよ
よく考えろ、pもローカル変数だ

292 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:32:16 ]
>>291
ほう?
void TestFunc(int* p)
{
    int x = 10;
    p = &x;
}

int main(int argc, char* argv[])
{
    int a;
    TestFunc(&a);
    printf("%d\n", a);
    return 0;
}


293 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:44:20 ]
>>292
そういう話をしてるんじゃないと思うが。

294 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:45:20 ]
何が「ほう?」なんだか。

295 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:52:06 ]
>>292
君が何を言いたいのか分からない
要するに、そのコードがどうした?
何か問題でも?

296 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:59:12 ]
>>292
void TestFunc(int* p)
{
  int x = 10;
  p = &x;
}

int main(int argc, char* argv[])
{
  int a = 5;
  TestFunc(&a);
  printf("%d\n", a);
  return 0;
}

出力結果
5

297 名前:292 mailto:sage [2008/01/05(土) 15:00:49 ]
ごめん、俺が悪かった。物凄く勘違いしてたらしい。いじめないでくれ。

298 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:10:58 ]
ローカル変数のポインタをリターンするときに注意が必要なんだっけ?

299 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:14:17 ]
あれ?戻った先で使おうと思っても残ってる保証がないんぢゃ? > 298

300 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:15:17 ]
そうだね。
int* f()
{
int a = 10;
return &a; // NG
}

特に構造体とか大きいものを返したいときに、
コストを避けようとしてやってしまう人もいるかも。
素直に値で返すか、引数に格納先のポインタを貰うべし。



301 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:21:00 ]
そんな時のための動的確保ですよ > 300

302 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:24:48 ]
>>300
動的確保するならauto_ptrですな。
std::auto_ptr<int> f()
{
return std::auto_ptr<int>( new int(10) );
}

303 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:25:07 ]
ヒープ領域に確保されるからdeleteで明示的に削除しない限り開放されないってやつか

ただしdelete忘れるとメモリリークが起こるから注意(´・ω・)

304 名前:デフォルトの名無しさん [2008/01/05(土) 18:52:20 ]
初歩的な質問ですいません。ポインタに関して質問です。
二次元配列の動的確保なのですが、
TCHAR hoge[5][260];
のような時に5の部分だけ動的に確保して260の方は固定したいのですが、
TCHAR *hoge[260];
hoge = (TCHAR *)malloc(sizeof(TCHAR)*260*num);
のようにすると、"'char *'から'char *[260]'に変換することはできません"とコンパイルエラー吐きます。
TCHAR **hoge;
で最初から動的確保を2度行う方法は分かるのですが、片方を固定した場合どのようにすべきでしょうか。

305 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:06 ]
TCHAR (*hoge)[260];

306 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:47 ]
hoge = (TCHAR (*)[260])malloc(sizeof(TCHAR)*260*num);

307 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:58 ]
sizeof(TCHAR)*260

sizeof(hoge)
にするとどうなる?

308 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:55:45 ]
あるいは

hoge = (TCHAR (*)[260])malloc(sizeof(*hoge)*num);

309 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:02:05 ]
typedef すると分かりやすいよ。


typedef TCHAR Path[MAX_PATH];

Path *hoge;
hoge = (Path *)malloc(sizeof (Path) * num);

310 名前:304 mailto:sage [2008/01/05(土) 19:23:37 ]
即レス感謝です。
>>307
そうすると、後者の場合は戻り値が4になりました。
何故かsizeof(TCHAR)だと1でした。何故2じゃないのだろう・・・。Unicodeじゃないからかな・・・??
>>305-306
のように間接参照演算子を括弧でくくると上手くコンパイルも通り、
for(i = 0 ; i < max ; i++) hoge[i] = "test";
と動作も確認出来ました。
>>309
のようにtypedefのやり方もググって見つけたのですが、
直接的にどうやれば通るか知りたかったもので。。 やはり、typedefの方が分かりやすいですね。



311 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:30:57 ]
型宣言の * は間接参照演算子とは別物。

312 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:35:03 ]
>>310
TCHARはマクロでワイド文字(wchar_t)とマルチバイト文字(char)を切り替える
VCならプロパティからUnicode文字セットを使用するようにすればワイド文字になる
後"test";は_T("test");もしくはTEXT("test");って書くように。そうすれば切替の対象になるから。

313 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 21:29:06 ]
構造体にすると見慣れた形になる。
typedef struct { TCHAR str[260]; } Path;
Path* hoge = (Path*)malloc(sizeof(Path) * num);
煩雑かな。

314 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:18:19 ]
なんて言うかポインタの配列と多次元配列へのポインタを勘違いしている様な希ガス
int *p[10]だとint型のポインタが10個あるポインタの配列
int a[10][10]とかの多次元配列へのポインタなら int (*p)[10]

315 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:55:57 ]
C言語で何か分かりやすいプログラムはないでしょうか。

316 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:56:34 ]
helloworld

317 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:59:19 ]
int main(){
return 0;
}

多分これが一番分かりやすい

318 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:48:10 ]
C++Builder 6でコンパイルした後
printfでテキスト文を表示したいんですけど
どうすればいいんでしょうか。

319 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:49:48 ]
エスパーが質問に答えるスレ
pc11.2ch.net/test/read.cgi/tech/1187922645/

320 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:15:16 ]
実行すれば良いんじゃない。



321 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:28:04 ]
日本語をコマンドプロンプトや「メモ帳」で表示させたいです。
できれば背景が白い所に分かりやすく表示させたい。
マジレスきぼんぬ。

322 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:34:03 ]
コマンドプロンプトの配色を「白地に黒文字」に設定

323 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:48:13 ]

#include <stdlib.h>

system( ); で、適当に
コマンドの命令だが、
color F0
とか
#define color(x) printf("\033[%dm", x + 30);
MS使用だったかも知れないが。

system("notepad.exe puni.cpp");
詳しくは調べて

324 名前:304 mailto:sage [2008/01/06(日) 02:57:35 ]
>>314
それを観て何となく納得出来ました。
キャストが初めて観るので、もうちょっと弄ってみます。
レスくれた皆さんありがとうございました。

325 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:36:09 ]
動的メモリの解放がいまいちよく判りません。
以下の(A)で生成した snow は、
(B)で問題なく解放されているのでしょうか?

void procMain()
{
 Snow ***snow = NULL;
 int i, j;
 
 // 生成 ←(A)
 snow = new Snow**[10];
 for ( i = 0; i < 10; i++ ) {
  snow[i] = new Snow*[5];
  for ( j = 0; j < 5; j++ ) {
   snow[i][j] = new Snow();
  }
 }
 
 // 解放 ←(B)
 for ( i = 0; i < 10; i++ ) {
  for ( j = 0; j < 5; j++ ) {
   delete snow[i][j];
  }
  delete snow[i];
 }
 delete snow;
}

下2つの delete が delete[] の様な気もしますが、
判る方がいましたらよろしくお願いします。

326 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:49:38 ]
>>321
ファイルに出力した後にそのファイルを開けばいい。
fp=fopen("test.txt","r");
fprintf(fp,"hoge");
fclose(fp);
system("test.txt");

327 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:32:15 ]
>>325
new [] 使ってるから delete [] だろうね。

こういうのはややこしくなるから、
フラットな配列にして添え字は掛け算するのがシンプルでいい。
Snow *snow = new Snow[10*5];
for (int i = 0; i < 10; i++ ) for (int j = 0; j < 5; j++ ) snow[i*5+j].xxx();
delete [] snow;


328 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:40:43 ]
>>321
>>318でエディションがPersonal以外ならOutputDebugString。イベントタブに出力される

329 名前:325 mailto:sage [2008/01/06(日) 08:55:02 ]
>>327
レスありがとうございます。問題が解決しそうです。

どちらの delete でもコンパイルが通っちゃうから自信が持てない・・・

330 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:33:30 ]
>>315
全然関係ないが、自分が一番最初に見たC++のサンプルはこれだ。

#include <iostream>
int main(int argc, char *argv) {
 std::cout << "Hello World !" << std::endl;
 return 0;
}

ついでに、一番最初に聞いたクラスの説明は
 猫も人もみな哺乳類なのです
だ。



331 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:48:57 ]
>>330
mainの引数もまともに書かないとは、悪いサンプルだな。

332 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 12:42:49 ]
俺はこれだった・・・

static char _main[] = { 0x81, 0x21, ...., 0x21 }

PDPほにゃらら専用とかかいてあった


333 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:01:44 ]
最近Win32APIを使ったソフトを作り始め、色々とサンプルを見て回ってるのですが
多くがひとつの.cppファイルにまとまってるようなコードや、グローバル変数が多いソースで、
それを元にコードを打ち始めたらひとつのファイルに何千行というコードが入り、設定情報
をグローバル変数で共有するような気持ち悪いコードになってしまいました。

Win32を用いたコードでうまくOOPの概念を取り入れて、出来るだけすっきりとしたコードを書きたいのですが、
なにかアドバイスがあればご教授願います。

334 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:08:52 ]
APIを直接呼ぶんじゃなくて、APIを包み込むクラスかしてから使う。たとえばファイル関係のクラスを作って外からAPIを見えなくする。

335 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:19:46 ]
>>333

Win32API 直叩きじゃなくて、MFCや.NET Framework使ったほうが良いよ。


336 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:21:16 ]
MFCや.NET Frameworkみたいなのを作りたいんだろ。

337 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:48:05 ]
SDLとかwx使おう是

338 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:25:17 ]
VCLも愛して

339 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:29:28 ]
暇だしVCLをC++に移植するか

340 名前:333 mailto:sage [2008/01/06(日) 16:30:59 ]
皆さん ご回答ありがとうございます。
どうやらMFCってのがうまくAPIを纏めているようなのでそれを使いたいと思います・・・



341 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:37:27 ]
>>339
それ欲しい。是非に

342 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:58:12 ]
>>339
文字列クラスには是非sprintfメソッドを

343 名前:デフォルトの名無しさん [2008/01/06(日) 19:06:34 ]
C++のSTLであるvector型に関する質問です。
AAA, BBB, CCCという3つのvector型があって、
それらの要素AAA[index], BBB[index], CCC[index] (indexは全て共通の整数)を一括削除したいのですが、
下記のような冗長な構文になってしまいます。
消したい対象DDD, EEE, FFFが増えていくと、プログラムが非常に長くなってしまうのですが、
イテレーターaaa, bbb, cccを極力使用せずにコンパクトに記述する方法は無いでしょうか・

vector<double>::iterator aaa; aaa = AAA.begin();
vector<int>::iterator bbb; bbb = BBB.begin();
vector<string>::iterator ccc; ccc=CCC.begin();
for(int a=0;a<index;a++) { aaa++; bbb++; ccc++; }
AAA.erase(aaa);
BBB.erase(bbb);
CCC.erase(ccc);


344 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:21:25 ]
>>343
いや、少なくともfor文はいらなくね?advance使えば?
というより、こういうのは思いっきりtemplateの出番だと思うんだが。


345 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:24:03 ]
>>343
そもそもデータ構造を
struct Hoge {
double d; int n; string s;
};
vector<Hoge> hoge;
とできないの?

ちなみにvector<>::iteratorはランダムアクセスできるので
AAA.erase(AAA.begin()+index)でOK

346 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:29:51 ]
>>344
>>345
ありがとうございます。

既にクラスの階層構造を何段か組んでいるので、これ以上階層化するのは避けたいと思いまして。
最後の1行の場合、indexがint型だからコンパイルエラーにならないでしょうか?

347 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:35:34 ]
>>346
RamdomAccessIteratorなら加算がオーバーロードされてるからおk

348 名前:343 mailto:sage [2008/01/06(日) 19:35:53 ]
まずはこの方法でためしてみます。
AAA.erase(AAA.begin()+index)

349 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:36:13 ]
>>347
重ね重ねありがとうございますm(_ _)m

350 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:52:25 ]
#include <stdio.h>
から始まる基本関数で
何か表示する物はあるんでしょうか。



351 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:02:22 ]
Random Access Iteratorだから

AAA.erase( AAA.begin() + index );
BBB.erase( BBB.begin() + index );
CCC.erase( CCC.begin() + index );

でいいんじゃね?

352 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:04:09 ]
printfとか簡単な関数でもいいんですが。
コンパイラの設定でブリーダーができません。

353 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:05:49 ]
質問はコミュニケーション言語日本でお願いします。

354 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:08:28 ]
これからテンプレートの勉強を始めようと思っているんですが

テンプレート:クラスみたいなもん
STL:テンプレートのあつまり

みたいな認識ってまちがっていますか?

355 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:10:15 ]
>>354
間違ってる

356 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:35:34 ]
関数テンプレートの使いどころというか選択についてです
気にしなくて良いレベルなのだと思いますが
引数にaとbを取り、大きな方を返す関数テンプレートがあったとします。
この場合、大きい値を返す関数のint用のものfloat用のもの・・・・といった具合にたくさんの関数を用意するのとでは
どちらが良いのでしょうか?
ここで関数テンプレートを使うとなんというかもったいないというか処理が無駄に大きく膨らんでいる気がしてならないです

今すぐに想像はできないのですが、ここでいう大小を比べる程度のものでなく、もっと大きなものならば関数テンプレートが有効だとは思います


357 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:36:29 ]
大事なところがorz

つまり処理数が多いものならば関数テンプレートを利用した方が良い、などの明確だったりしないまでの決まりのようなものはあるのでしょうか?

358 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:38:53 ]
>>356
何で?
ぜんぜんもったいなくないと思うけど。
呼び出されてる型のものだけが具体化されるから
効率的だと思うし、実際std::maxテンプレートはあるじゃない。

359 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:40:57 ]
>>356
>int用のものfloat用のもの・・・・といった具合にたくさんの関数を用意する
これが面倒じゃないと思うならがんばれば?

360 名前:356 mailto:sage [2008/01/06(日) 20:41:07 ]
>>358
ありがとうございます
そうですよねorzもったいないと感じている自分がおかしくてならないです
積極的に使っていこうとおもいます



361 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:03:26 ]
だから、std::max()を使えってば。

362 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:06:46 ]
>>361
356は例えばで言ってるだけだろ

363 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:14:07 ]
>>360
おかしくないです。出てくるコードの大きさを見積もることは必要なことです。


364 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:17:24 ]
>>356

>int用のものfloat用のもの・・・・といった具合にたくさんの関数を用意する

保守性を考えるとこの考え方はは良くない。
バグがあったら全部直さなきゃいけないし、直し忘れが出てくる可能性がある。
ステップ数が少ない場合でも、バグが出るときは出る。
こういう場合を想定してテンプレートが出てきたわけだし。


365 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:00:30 ]
templateを使うとexeがバカでかくなるって言うアホがいるんだよな
俺も会社でよく言われるんだわ

366 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:04:31 ]
そういやテンプレートを使う機会が無い

367 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:07:18 ]
仮にばかでかくなったとして、どのぐらいのサイズなら問題だと感じるんだろう……

368 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:13:00 ]
環境によってさまざまだろうね。
組み込み環境なら結構致命的になりかねん気もするけど、それならC++にするメリット少ないし。
一般的なソフトウェアならCDやDVDに入りきらなくなったらとかじゃないのかな?

369 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:13:48 ]
仮にテンプレート使わなかったとしても、
似たような物作るわけだしな。

370 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:34:36 ]
>>365
昔のコンパイラは知らないけど、信じがたい。
具現化されるのは自分で呼び出してるものだけだから。
インライン化とか別の理由で大きいんでない?
それともテンプレート使わなくても、もともとバカでかく
なるプログラムかもしれん。



371 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:43:46 ]
>>370
大きなクラスを丸ごとテンプレートにしたんじゃないか?

372 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:44:17 ]
オブジェクトファイルのサイズだけ比較すればずっと増えるんじゃね?計ったことないけど


373 名前:デフォルトの名無しさん [2008/01/06(日) 23:01:42 ]
VC++2008express editionでコンソールアプリケーションを作れるか実験してみた結果
できませんでした。
どうしたもんでしょう。

374 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:04:36 ]
それだけじゃ、何が起こったのかサッパリ

375 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:07:35 ]
C言語の質問なんだが。
持たせたファイルポインタからファイルネームを得たいんでファイルポインタからメンバーを見てみたら
tmpfnameってのがあったけど、このtmpfnameってそのファイルの名前と考えておk?
あと、これって環境依存?

376 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:12:35 ]
環境依存

377 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:12:59 ]
FILE構造体の中身は処理系依存

378 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:15:56 ]
>>376-377
ありがとうございました。
別の方法で管理することにします。

379 名前:デフォルトの名無しさん [2008/01/06(日) 23:36:51 ]
C言語の質問です
main関数で用意したdouble *xを別の関数の中でmallocを使ってサイズを決めることと数値の代入を行いたいのですが上手く出来ません
どのようにすればいいでしょうか
以下は自分で作ったものの該当部分だけを抜き出し簡略化したものです


#include<stdio.h>
#include<stdlib.h>

void f(double *);

void main(void)
{
  double *x;
  f(x);
  free(x);
}

void f(double *a)
{
  a=(double *)malloc(sizeof(double)*3);
  if(a==NULL){
   printf("メモリ確保失敗\n");
   exit(1);
  }
  a[1]=2.0;
}

380 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:40:52 ]
ポインタを関数に渡しているといってもポインタという値を渡してるだけ。
そのポインタを関数の中で書き換えてもmainじゃ影響されないから引数消して返り値使うとか、
ポインタのポインタを引数でとるかのどっちか。



381 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:41:45 ]
>>379
そりゃ、上手くいかんわ。

void f(double **);

void main(void)
{
double *x;
f(&x);
free(x);
}

void f(double **a)
{
*a=(double *)malloc(sizeof(double)*3);
if(*a==NULL){
printf("メモリ確保失敗\n");
exit(1);
}
*a[1]=2.0;
}


全く試してないけど、これでどうよ?

382 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:01:18 ]
>>381
俺も全く試してないけど

>*a[1]=2.0;
なんか嫌な臭いがする。
優先順位、これでよかったっけ?

383 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:04:54 ]
>>382
(・A・)イクナイ!!

384 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:07:09 ]
*a[1]は*(a[1])だったはずだな。
やりたいのは(*a)[1]か?

385 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:12:12 ]
>>378-384
どうもありがとうございます。
>>381>>384に変更したものを使えば上手くいきました

386 名前:デフォルトの名無しさん [2008/01/07(月) 00:38:10 ]
for(i=0;i<N;i++){
  fscanf(fp,"%lf %lf",&m[i],&n[i]);
}

↑の状態でビルドして実行するとエラーが出る

for(i=0;i<N;i++){
  fscanf(fp,"%lf %lf",&m[i],&n[i]);
  printf("%f %f\n",m[i],n[i]);
}

次に↑のように書き換えてビルドして実行するとエラーが出ない

for(i=0;i<N;i++){
  fscanf(fp,"%lf %lf",&m[i],&n[i]);
}

その後で↑の状態に戻してからビルドして実行すると最初と同じなのにエラーが出なくなっている



こういったことが起こるのはどのような理由でしょうか




387 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:45:18 ]
すべてのソースを貼り付けるとか
エラーの内容を書くとか
そういう努力をしないとエスパー以外答えられないと思うよ

388 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:44:26 ]
エスパーしてみる。
ファイル内に改行があってfscanfが2回目以降読み込みに失敗している。

389 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 03:26:27 ]
多分初期化忘れ。エラーが出ない方はたまたま

390 名前:デフォルトの名無しさん [2008/01/07(月) 05:17:35 ]
>384
優先順位って難しいね.
みんなちゃんと覚えてるの?



391 名前:デフォルトの名無しさん [2008/01/07(月) 06:18:31 ]
別スレから誘導されて来ました。
改めて、こちらで質問させて下さい。

まず、フラッシュメモリにデータを書き込みます。
そしてそのデータが書き込まれたセクタ?(アドレス?)を取得する方法ってありますでしょうか?

392 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 06:35:09 ]
誰だよ、誘導したのwここでもスレ違いだろw
少なくともCレベルじゃメモリアドレスしかわからんだろうから無理じゃね?
OSレベルの話になるね。

393 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 07:00:26 ]
>>392
そうですか…
かなり難しいようですね…

環境は、Win32(XP Pro) + VC++ なんですけど…

394 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 07:04:39 ]
DOS 時代なら INT 25H(アブソリュートディスクリード)使えば何とかなると思うけど・・・。

395 名前:デフォルトの名無しさん [2008/01/07(月) 07:22:43 ]
Inside Windows NT Disk Defragmenting
technet.microsoft.com/en-us/sysinternals/bb897427.aspx
デフラグ用のAPIではだめかい?

396 名前:393 mailto:sage [2008/01/07(月) 07:56:40 ]
>>394-395
助言ありがとうございます。
がんばって調べてみます!

とりあえず、395さんの紹介して頂いたページを見てみたいと思います。

397 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 08:07:54 ]
>>390
自信ない使い方をするときに括弧使えばいいだけだろ。

398 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 10:10:50 ]
>>390

考えるのがめんどくさいので、常に括弧付。
可読性も向上。


399 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 13:25:53 ]
>>398
int a = (b + (c * d)) - e;とか書くの? 却って可読性が落ちる希ガス。

400 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 13:27:27 ]
lispに慣れてればどうということはない



401 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 14:24:29 ]
>399
煽りとしてはどうかなあ?


402 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 14:34:46 ]
素朴な疑問だろ?

403 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 14:43:02 ]
左結合か右結合か、考えるの面倒だよね。
だからきっと、
a = (b = (c = 0));
って書くんだよ。

404 名前:デフォルトの名無しさん [2008/01/07(月) 14:43:30 ]
>>399
ぶっちゃけa = b + c * d - eよりはよっぽどわかりやすい

405 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 14:45:20 ]
俺は
a = b + (c * d) - e
だな。
順読み以外は括弧付ける派。

406 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 14:46:15 ]

a = c * d + b - e

407 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 15:13:45 ]
b,c,d,eの順序に意味がある場合の話だろうjk

408 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 15:20:45 ]
質問があります。
今C言語を勉強しようか考えている所なのですが
これを学ぶ事によって、ボンバーマンのようなゲームは作成可能でしょうか?
また作れると仮定しまして、C言語よりボンバーマンのようなゲームを作るのが
簡単な言語はありますでしょうか?

もしよろしければ教えてください、お願いします。

409 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 15:29:34 ]
>>408
英語を学ぶことによってマクベスを書くことは可能かどうか、
英語で書くより簡単な言語はあるかと聞くくらい、無意味だ。
こっちにでも逝け。

初心者のためのプログラミング言語ガイド Part6
pc11.2ch.net/test/read.cgi/tech/1193132235/

410 名前:デフォルトの名無しさん [2008/01/07(月) 15:52:46 ]
>>408
どんな言語でも何かを作る時apiや構文等の知識は必要となり
簡単ていう概念はとっぱらったほうがいい。
どんなもんでもある程度確立した物を作るのはめんどうなもんだ。



411 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 16:06:29 ]
誘導ありがとうございます。

簡単と言う発言は軽率でした
言語にも向き不向きがあるかと思ったので、
より作りやすいと言う意味でした

それでは誘導先に行ってきますので、
こちらでの質問は取り下げさせてください

412 名前:デフォルトの名無しさん [2008/01/07(月) 22:33:27 ]
藤原紀香相手に中だしSEXするよりは簡単だろう

413 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:52:17 ]
>>412
おっさん乙

414 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 01:33:25 ]
C++の標準I/Oライブラリについてですが、
basic_istream<>やbasic_ostream<>はbasic_streambuf<>
を利用してバッファ入出力を行ってますが、継承はして
ないですよね?basic_istream<>やbasic_ostream<>は
コンポジションとしてbasic_streambuf<>を保持してるのですか?

415 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 02:45:31 ]
.jpgとかをいじるのは古いプログラムなんですかね。

416 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 02:47:09 ]
>>414 そうともいう。

417 名前:デフォルトの名無しさん [2008/01/08(火) 03:01:57 ]
入力がEUCで漢字コードを検索したい場合、どうやればいいんでしょうか?コンパイラはシフトジスが基本みたいです

418 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 03:45:00 ]
>>415
「いじる」ってのをどういう意味で使ってるのかよく分からんが
JPEG<=>ビットマップの変換は古いというか普通ライブラリを使う


419 名前:デフォルトの名無しさん [2008/01/08(火) 04:01:05 ]
int iskanji(int c)
{
return (0xA1 <= c && c<=0xfe)
}


420 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 05:28:11 ]
std::vector<int[10]>みたいなことをやりたいのですが、ベクタのベクタにするか、
メンバ変数に配列を持つ構造体のベクタにするしかないんでしょうか




421 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 05:53:22 ]
>>420
int[10]は型じゃないっしょ?

422 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 07:23:33 ]
>>419
EUC の1バイト目はもうちょっと範囲広いし、
3バイト文字も存在する。

423 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 07:49:19 ]
どこのEUCだか。

424 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 11:52:47 ]
>>420-421
int[10] は要素数 10 の int の配列型だよ。でもコピーコンストラクタや代入演算子が
使えないんで vector には入れられない。 >420 の言うような回避方法が必要。

425 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 12:50:52 ]
バイナリのデータを1バイトづつ読み込んでいって、FFといデータの前に
次の値を書き込むというのをやりたいんですが、こういったことをやる場合、
ifstreamで読み込んでいってデータを見つけたら位置を取得→
ofstreamを使って取得した位置に書き込みという風にやらないといけないのでしょうか?

426 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 12:55:28 ]
>>425
C/C++ 標準のファイル操作ではファイルの一部だけを書き換えることはできない。
データの挿入もこれに当てはまる。(ただし元の内容の後ろに追記はできる。)

ってことで新しいデータを含んだファイルの内容を全部 ofstream に突っ込むことが必要。

427 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:09:13 ]
>>420
std::vector<int(*)[10]>とか

428 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:14:32 ]
>>425
入出力を別のファイルにしておいて、入力データが「FFとい」だったら
それを出力する前に「次の値」を出力すればよろしい。
一つのファイルでそれを実現するのは、(サイズが変わるのであれば)むずかしい。

429 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:15:37 ]
>>426
>C/C++ 標準のファイル操作ではファイルの一部だけを書き換えることはできない。
いいえ。

430 名前:426 mailto:sage [2008/01/08(火) 13:23:52 ]
ごめんよ。サイズの変わらない書き換え(上書き)はできるね。データの挿入ができないんだ。



431 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:31:44 ]
>>426-430
ありがとうございます。勉強になりました。
バイト配列にデータを全部読み込んで、配列をFFの一つ前のデータまで書き込んで→
新しい値を書き込んで→残りの配列を書き込む という方法でやりたいと思いますm(_ _)m

432 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 14:51:17 ]
>>431
istreambuf_iteratorとostreambuf_iterator使うと簡単にできそうだな。
速いし。

433 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 17:39:27 ]
webカメラ(usb接続)のドライバの取得方法と、
プログラム内でそのドライバを作用させる方法をご教授願えないでしょうか
環境は.net 2003 c++です

434 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 18:36:44 ]
ドライバ直じゃなくて普通はDirectShow経由じゃね?

435 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 20:05:46 ]
readlineがGPLだったので、自前で書くついでにc++に移植しちゃおうと思いました。
ezstreamというクラスを作って、

string line;
ezstream es;
es.setline("yes");
es.setline("no");
line = es.getline();

と書けば、line=の行でreadline風の動作(ヒストリなどカーソルキー使用可能、ctrl+aなどのemacs風キーバインドも最低限使用可能)
をするところまでは書き上がりました(tab補完はまだですが……)。上の記述では、さらに起動時点でヒストリにyesとnoが入っています。
(つまり、↑を押せばno,yesの順にコマンドラインに出てくる)
で、せっかくなので

ezstream es;
es << "yes";
es << "no";
es >> line;

と記述出来るようにしたいと思っています。

template<class E, class T = char_traits<E> >
class basic_ioestream : public basic_iostream< E, T >{
private:
hogehogehoge;
public:
string getline(void);
string setline(void);
basic_ioestream& operator>>(……

ここで詰まったのですが、どう書けば良いのでしょうか。
それとも>>のオーバーロードだけすれば済むような単純な話ではないのでしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 20:23:50 ]
むしろoperator >>を定義すればよいという話ではないよ。

Boost.Iostreamsを使うのが楽。
www.kmonos.net/alang/boost/classes/iostreams.html

それを使いたくなければ、ググれ。
www.google.co.jp/search?q=iostream+%E6%8B%A1%E5%BC%B5

437 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:00:35 ]
mac ox10.5を使ってるのですが、次のソースコードをgccで
コンパイルしようとするとエラーが出てしまいます。
ソース-----------------
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main(void) {
FILE *fp;
char *line = NULL;
size_t len = 0;

while (getline(&line, &len, stdin) != -1) {
printf("%s", line);
}
if (line)
free(line);
exit(EXIT_SUCCESS);
}
----------------------
エラーメッセージ--------
Undefined symbols:
"_getline", referenced from:
_main in ccm08hLk.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
----------------------
getline関数関連のエラーなのですが、ネットを検索していると次のような記述を発見しました。
『MacのGCCはGNUのに手を入れてあるのでstdio.hにgetlineがない』
getlineを使用してコンパイルを成功させるには環境をどのようにすれば良いのでしょうか。

438 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:09:10 ]
無い関数は作る!

勉強になるから作ってしまおう

439 名前:437 mailto:sage [2008/01/08(火) 21:18:41 ]
すみません。目的としては他の人が作ったソースをコンパイルすることなのです。
使用するソースコードは既に用意されているので、(非常に長いソースコードです)
できればソースコードをいじらないでコンパイルしたいのです。

440 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:25:02 ]
>>439
まずどの環境のどのコンパイラをターゲットに書かれたソースか調べる。




441 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:25:12 ]
>>439
別のファイルに関数を作ればいいから、ソース変更しなくてもいいよ。

442 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:58:11 ]
>>423
eucJP-ms

443 名前:433 mailto:sage [2008/01/08(火) 22:40:06 ]
>>434
VFWを使っていますので残念ながらDirectShowを使うことができません
カメラをUSBポートから引っこ抜いてから再度差し
カメラを動作させるといったことをしたいのですが…

444 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 22:50:30 ]
C++で、比較的大きくてかつ静的な連想配列を宣言したいんだけど、
ソースコードにどうやって埋め込むのがスマートでしょうか??

445 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:25:19 ]
class Hoge {
public:
 const std::map<A, B>& GetMap() {
  static Hoge singleton;
  return singleton.m_map;
 }

private:
 Hoge() {
  // ここで初期化
 }
 std::map<A, B> m_map;
};

こんな感じか?

446 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:26:45 ]
>>330
それを実行するのにはコンパイラには何か必要なんですかね。

447 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:40:52 ]
>>446
日本語でおkだな。
コンパイルしたいのであればC++のコンパイルが可能なものであればなんでもいい。
コンパイラに必要なものが知りたいのであれば、ソースファイルだけあればいい。

448 名前:デフォルトの名無しさん [2008/01/09(水) 00:45:13 ]
質問です。
bcc developerを使ってC言語を勉強してるんですが、

#include ""DxLib.h"

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1)return(-1);
DrawBox(0,0,120,65535,TRUE);

WaitKey();
DxLib_End();
return(0);
}

と打ち込むと
Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)
となります。
いろいろ調べてみた結果Windows アプリケーション→コンソールアプリケーションに
チェックを変えると、
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
となり、やはりだめです。。
もうにっちもさっちもいきません。どなたかアドバイスお願いします

449 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:55:34 ]
 #include <windows.h>

コンパイルオプション -W

450 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:59:49 ]
>>448
よく分からんけど先頭行に
#include<windows.h>
でいけるかも



451 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:57:55 ]
>>444
ソート済み const 配列の形で定義して、 lower_bound() とかする関数を
インターフェースとしてかぶせとけばいいんじゃない?

452 名前:448 [2008/01/09(水) 02:06:46 ]

説明不足ですみませんでした。
とある参考書を使っていて、「DxLib」というファイルをインクルードして
進めていくらしく、それで#include"DxLib"となっているみたいです。
>>449-450
れすありがとうございます。
#include<windows.h> としたんですが、同じエラーがでました。
コンパイルオプションってどうやっていじるんでしょうか。
BCC developerのプロジェクト設定で
●コンソールアプリケーション(-WC)
Windowsアプリケーション(-W)
というようにチェックするところがあるんですが、
このことですか?

453 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:12:28 ]
あたりが付いてるならとりあえずやってみてから質問してはどうか

454 名前:448 [2008/01/09(水) 02:16:38 ]
やってみたんですが、だめでした。
根本的に間違ってるんでしょうか

455 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:29:52 ]
>>451
それなんてEffective(ry

456 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:38:20 ]
 >>448
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5704.zip

素直に、VC++とかにしてくれれば、話は早いんだが、まぁ、ゲーム作りたいやつは応援する主義なんでね。

457 名前:448 [2008/01/09(水) 02:54:28 ]
>>456
ありがとうございます!
さっそくやってみます

458 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 03:23:36 ]
>>448
 とりあえず、VC++2005ExpressEditionを進めておく
www.microsoft.com/japan/msdn/vstudio/express/maninstall/
の 「Visual C++ 2005 Express Edition」 日本語版 611,540 KB 0xB3AD1A2F を選択してダウンロード、
仮想ドライブでインストール、あるいは、一度CDに焼いてから、でもよい。

Win32APIを利用するためには、PlatformSDKが必要
www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
ここの、最後のほうに、「PSDK-x86.exe 1.3 MB」と (Download) がある。
似たようなのが、3つあるが、一番下の(Download)を選ぶ。ダイアログが出ると保存なりしてくれ。
 ダウンロードした exe を実行して指示に従えばよい。

 参考ページ : www.microsoft.com/japan/msdn/vstudio/express/visualc/

459 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 03:50:34 ]
2008じゃだめなん?psdkも一緒にインスコできるぜ

460 名前:デフォルトの名無しさん [2008/01/09(水) 03:56:03 ]
ポインタの基本的なことなのかもしれませんが、良く分からず悩んでおります。

2次元、3次元配列をポインタにキャストして操作したいのですが、
以下のような操作は問題ないのでしょうか?

int* hoge = (int *)new int[2][3];

例えば、上のようにcastして、1次元配列のint[5]と同じように
操作しても問題ないでしょうか?





461 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:04:13 ]
>>461
ちょっとずれるかもしれないが、plaza.rakuten.co.jp/tcross/diary/200711230000/

 キャストは、一日3回までだっていったでしょう。
できるだけキャストしないですむように組みましょう。
 問題ありそうな気がする。試してないので、あれだけど。

462 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:07:53 ]
C++のブースト以外のプログラムってないでしょうか。

463 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:10:49 ]
意味が分からないぞw
ライブラリのことならそりゃいっぱいあるよ

464 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:12:35 ]
>>460
CもC++も配列はあくまでも一次元。(多次元と表現するけど。)
今の場合は、int[3]を要素として二つ持つ一次元配列だから
int (*p)[3] = new int[2][3];
だと思う。

465 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:12:45 ]
>>461
断言できないが、簡単に試したら、問題なかった。
でも、気持ち悪いので、出来るだけキャストはやめて欲しい。

466 名前:460 [2008/01/09(水) 04:23:49 ]
>>461
>>464
>>465

みなさんありがとうございます。
できれば変なキャストはさけたいのですが、
呼び出さなければいけないDLLのメソッドが
int * で待ってまして、どうやって2次元配列、3次元配列を渡せば
よいのか悩んでおります。
(ちなみにFortranのDLL)

いちおう上のようなやりかた
int* hoge = new int[2][3];
で渡して動作しているよう?なのですが、

なにか動きがおかしいようです・・

メモリ的にはint[5]と同じなので、問題ないのかな?
とも思うのですが・・

467 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:39:05 ]
2 * 3 = ?

468 名前:460 [2008/01/09(水) 04:41:41 ]
>>467
すみません、int[6]でした。

469 名前:460 [2008/01/09(水) 04:47:58 ]
www.nurs.or.jp/~sug/soft/tora/tora10.htm
ここをみると、

int x[10][10];
int i;
int *p = (int *)x;

for( i = 0; i < 100; i++ ) {
*p++ = i;
}
printf( "x[5][5] = %d\n", x[5][5] );

とあるので、どうやら問題なさそうですね・・。
でもC++でも問題ないのか、なぞですが・・。

470 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:58:32 ]
>>466
int (*p)[3] = new int[2][3]; にして&p[0][0]を渡せばいいんでない?
キャストしないとコンパイルエラーだし、コンパイルを通すための無理やり
キャストは正直気持ち悪い。



471 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 05:04:30 ]
int* hoge = (int *)new int[2][3];

いや待てよ。上の場合だと

delete [] hoge;

が未定義動作になる可能性がなきにしもあらずな気がしないでもない。
大丈夫かもしれんが移植性と規格を考えたら、>>470のほうが安心だな。


472 名前:460 [2008/01/09(水) 05:39:13 ]
>>470-471
ありがとうございます。そちらの方がやさそうですね。
ためしてみます。
ちなみに3次元配列の場合は

int (*c)[2][3]= new int[5][2][3];

のような感じですよね?

473 名前:460 [2008/01/09(水) 05:39:46 ]
「よさそうです」の間違いでした。


474 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 07:42:52 ]
最初から1次元配列で確保しておいて、オフセットを調整した方がいい希ガス。
オフセット計算用にこんな関数でも用意して。
static int offset(int w, int x, int y) {return w * y + x;}

475 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 10:47:37 ]
>>472
そう。

>>474
そう思う。


476 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 12:37:45 ]
>>448
俺は前にbccでWinMainの引数型不一致でコンパイル通らなかったことがある
詳しいことは忘れたが第三引数がTだったような、違うかったような

477 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:17:31 ]
スレ違いかもしれませんが7-zip32.dllで
自分で作ったデータを直接zipで保存する方法分かる人いませんか?
具体的に言うと
自分で作ったデータをファイルとして出力→7-zipでファイルを指定して圧縮 はできるのですが
圧縮範囲をポインタで指定→ファイル名を指定して書庫作成 ができないのです。

478 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:25:20 ]
>>477
ファイルアーカイバで、ファイル以外のものをアーカイブする機能があるとも思えないが。
そもそも、なんでファイルに出力しちゃいけないの?

479 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:30:51 ]
>>478
数が多いので出来ればいちいちアウトプットしたくないんです。
最悪 ファイル出力→書庫作成→ファイル消去
ってしようと思ってます。
やっぱりこういったdllには基本的にないんですかね?

480 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:40:17 ]
圧縮したいだけならアーカイバのDLLを使わないで圧縮ライブラリ使ったら?



481 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:51:38 ]
そのとおり

482 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:52:07 ]
>>479
7-zip32.dllのAPIリストを流し読みしてみたが、メモリソース展開用の関数は無いっぽい。
出力先はメモリで受け取れるみたいだけどなw
480が言ってるようにzlibなりを使うのも手。
(その場合他のアーカイバと互換性を持たせるのは少し面倒だが)
あとは7-zip32.dllのソースをいじってメモリソース対応版を作るのも良いかも。
該当箇所を探すのが少し面倒だろうけど。

483 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:27:16 ]
軽く調べたら7zip(7-zip32.dllではなく、本家のほう)のcommon/StdInStream.h .cpp
を修正すればメモリソースに対応できると思う。
あとは自分で調べるか詳しい人に聞いてね

484 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 16:58:56 ]
統合アーカイバDLLってのは、基本的はファイル経由ばかりかと。

極端に言えば、昔の(今もあるけど)コマンドラインインターフェースを
そのままDLLに渡して動かすために作られたようなものだから。
各DLLに共通の操作を実現させるために、基本的な処理が中心だし。

だから、その元になるものを参考にすれば、大抵はオンメモリの操作になる。
例えば、TAR32.DLLではなくてzlibを使うとかね。
全てにそういうのがあるわけじゃないだろうけど。

485 名前:デフォルトの名無しさん [2008/01/09(水) 17:44:08 ]
>>463
ライブラリ詰め合わせとかがあると便利なんですけど
誰かマジレスお願いします。

486 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:44:36 ]
>>466

//配列へのポインタ−−簡単な例

#include <stdio.h>

int main(void)
{
int a[4][10]; // 配列
int i, j;
int (*p)[10]; // 配列へのポインタ

//配列へ代入
for(i=0;i<4;i++) {
for(j=0;j<10;j++) {
a[i][j]=(i+1)+(j+1)*10;
}
}

//ポインタを使って表示する
for(p=a;p<a+4;p++) {
for(i=0;i<10;i++) {
printf("%3d ",(*p)[i]);
}
printf("\n");
}
return 0;
}


487 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:46:51 ]
>ライブラリ詰め合わせ
そりゃいくらでもあるぞ。目的も環境も判らんからなんとも言えんが。

488 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:49:23 ]
>>485
割とまじめに答えたんだがな
存在するなら
欲しい機能名 ライブラリ
で適とーにぐぐれば見つかるだろ

いろんなライブラリが片っ端から詰め合わせてあるのが欲しいとか?w
ねーよwwwww

489 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:49:55 ]
アーカイバの展開なら00AM型Susieプラグインがメモリストリームからの展開サポートしてるのにね。

490 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:09:33 ]
FILE_ATTRIBUTE_TEMPORARYを付けてCreateFileして、
Windowsにバッファフラッシュされないことを期待。



491 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:34:13 ]
>>488
ここ2、3年新しいライブラリとかは作られていないんですかね。
携帯全盛期でほとんどプログラム終わってると困るんですけど。

キャノンの説明受けに行くのでちょとでも関係あることあればいいんですけどね。

492 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:44:08 ]
「キャノン」って書いてる時点で

493 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:17:43 ]
ぶっちけた話C++でformに写るようにするには
VBしかないんでしょうか。

494 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:23:37 ]
画像表示さえできればボンバーマンくらいはすぐできるだろう
今ならjavaとかが手軽でいいんじゃないか

495 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:31:41 ]
VC2005で簡単にゲーム作ってみようと思ったんですが、
getch()でキーコード受け取ったら、カーソルキーが全部224で判別できないんです。

これをどうにかして識別する方法を教えてください。
別にgetchに拘らなくてもいいですが、出来ればC/C++の標準ライブラリに入っているものだと嬉しいです

496 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:38:13 ]
>>491
488が否定しているのは詰め合わせのようなものの存在を否定しているだけだぞ。

497 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:01:59 ]
>>495
そもそも getch は標準関数じゃない

498 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:11:49 ]
>>495
とりあえず「ゆきいるか」でググってLunaでも使っとけばいいと思う。

499 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:24:35 ]
>>491
Qt でも使ってみたら。


500 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:26:00 ]
>>495
カーソルキーは二つのコードが送られてくる気がする
224 が制御コードで続くコードでカーソル方向が判別できるはず



501 名前:495 mailto:sage [2008/01/09(水) 21:31:18 ]
回答ありがとうございます。getchって標準ライブラリじゃなかったんですか、初めて知りました…
>>498
あんまり外部のライブラリ使いたくなかったんです。ちょっと試しにやってみようかって程度だったので。

>>500
その発想は有りませんでした。試してみたら確かに取得出来ました!

502 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:40:54 ]
ttp://msdn2.microsoft.com/ja-jp/library/19f56tw3.aspx
↑のページに書いてあるコードで、一度

#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)

と定義してから

#define new DEBUG_CLIENTBLOCK

と定義し直す意味って何かあるのでしょうか

503 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:59:54 ]
new( _CLIENT_BLOCK, __FILE__, __LINE__)っていう文字列にトラウマがあって使いたくないんじゃね

504 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:01:23 ]
>>493
・CLI+Windows.Form
・VCL

505 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:38:12 ]
>>502
ヘッダファイル内で new が置換されると困るだろ?

506 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:39:46 ]
困るってのは、具体的に言えば operator new あたりが一番困る。

507 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:05:08 ]
レスありがとうございます。おおよその目的がわかりました。
newを使うファイルでいちいち
#define new DEBUG_CLIENTBLOCK
を定義するのがめんどくさそうですね

508 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:06:40 ]
それ専用のヘッダファイルを用意するとか。
最後にインクルード。

509 名前:448 [2008/01/09(水) 23:13:00 ]
>>458
なにからなにまでありがとうございます。。いじくってみます。
>>476
そのへん調べてみます

510 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:14:35 ]
STLにたどりつかねぇ、焦っちゃダメだ・・基礎がおろそかになる



511 名前:476 mailto:sage [2008/01/09(水) 23:54:28 ]
>>509
すまん、今試したらTは何の関係も無かったw
何でエラー出てたんだっけな……

512 名前:476 mailto:sage [2008/01/10(木) 00:03:07 ]
連投すまん、うちのエラーはLPCSTRでC++としてコンパイルした時だった(LPSTRならコンパイル通る)
つまり少なくとも>>448みたいにCがついていないのじゃ関係無かったすまん

513 名前:448 [2008/01/10(木) 00:14:32 ]
わかりました。わざわざ教えてくれてすいません

514 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:22:38 ]
 >>448
 よかった。まだ見てたか。将来、今までにない斬新なゲームを作ってくれ。

こういうことは、ゲ製板 pc11.2ch.net/gamedev/
のほうが、いいと思う。

DXライブラリ 総合スレッド
pc11.2ch.net/test/read.cgi/gamedev/1197468399/

515 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:41:38 ]
>>502見当違いかもだけど
_CLIENT_BLOCK, __FILE__, __LINE__
↑こいつらがどっかで定義されてるマクロだとするとその中身を展開するには
一回newをDEBUG_CLIENTBLOCKにしてからnew( _CLIENT_BLOCK, __FILE__, __LINE__)にしないといけないんじゃないか?
#define new new( _CLIENT_BLOCK, __FILE__, __LINE__)だと
以前に
#define _CLIENT_BLOCK 何か
ってのがあっても、一回のマクロ展開ではnew( _CLIENT_BLOCK, __FILE__, __LINE__)が出るだけで
_CLIENT_BLOCKがそのまま展開されずに残るって言う・・・

試してないけどね!!

516 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:44:54 ]


以下の文字列があったとします。
AB AA ABCA BA BB

この中かからABCが含まれているか検査したいのですが
どうやって実現すればいいのでしょうか

strstrだとABCAのABCに部分一致してしまうので使えないと
思うので困ってます

517 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:49:35 ]
文字列の最後に空白をくっつけて
ABC空白 で探せばよくね?

518 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 01:43:28 ]
>>512
WinMainは<windows.h>のさらにどっか奥でプロトタイプ宣言が為されているので、
それと合わないとそういう風にエラーになってしまう。

519 名前:519 mailto:sage [2008/01/10(木) 01:44:30 ]
書き忘れた。
多重定義にならず、エラーになるのはextern "C"が付いているため。

520 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 01:58:56 ]
>>516
その例だと「AB AA ABCA BA BB」のなかに「ABC」という文字列はなかったとしたいのか?
だとするならばstrcmpでよくね?



521 名前:520 mailto:sage [2008/01/10(木) 02:01:15 ]
書いた後に気づいた。char str[] = "AB AA ABCA BA BB";ってことか。
char * str[] = { "AB", "AA", "ABCA", "BA", "BB" };だと思った。
セパレータが固定されてるなら>>517でよさそうだね。
ただし、後ろだけじゃなくて前後につけなきゃだめだけど。

522 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:04:11 ]
>>516
正規表現ライブラリを使ってみるととか

523 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:26:09 ]
オタだとばれない程度のプログラムってどんな物があるんでしょうか。

524 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:30:31 ]
>>523
中途半端なプログラムではなく、きっちりしたプログラムならヲタだと思われない。
また、言語知識以外にも専門的な知識が必要になるプログラムなら確実に思われないだろうな。
たとえば、半導体のキャリア輸送をシミュレートするプログラムとか。

525 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:38:51 ]
他には何かないのか。

526 名前:デフォルトの名無しさん [2008/01/10(木) 03:09:30 ]
以下のソースがコンパイル通りません。
色々とそぎ落としてこうなったのですが、どこが間違ってるのでしょうか?
誰か助けて〜

#include <iostream>
#include <queue>
using namespace std;
class event {
int priority;
public:
event() { priority = 0; }
bool operator<(const event &a);
};
bool event::operator<(const event &a) {
return this->priority < a.priority;
}
int main() {
priority_queue<event> q;
return 0;
}


527 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 03:12:25 ]
>>526
デバッグを他人に丸投げしたいのでなければ、エラーメッセージくらい張れ。

528 名前:デフォルトの名無しさん [2008/01/10(木) 03:50:09 ]
>>527
すいません。以下です。コンパイラはlinuxのg++です。
意味があるのは最後の4行だと思うのですが、それでも意味が分からん。。。

$ g++ test.cpp
/usr/include/c++/4.2.1/bits/stl_function.h:
In member function 'bool std::less<_Tp>::operator()
(const _Tp&, const _Tp&) const [with _Tp = event]':
/usr/include/c++/4.2.1/bits/stl_heap.h:279:
instantiated from 'void std::__adjust_heap
(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare)
[with _RandomAccessIterator = __gnu_cxx::__normal_iterator
<event*, std::vector<event, std::allocator<event> > >,
_Distance = int, _Tp = event, _Compare = std::less<event>]'
/usr/include/c++/4.2.1/bits/stl_heap.h:404:
instantiated from 'void std::make_heap(_RandomAccessIterator,
_RandomAccessIterator, _Compare) [with _RandomAccessIterator
= __gnu_cxx::__normal_iterator<event*, std::vector<event,
std::allocator<event> > >, _Compare = std::less<event>]'
/usr/include/c++/4.2.1/bits/stl_queue.h:353: instantiated from
'std::priority_queue<_Tp, _Sequence, _Compare>::priority_queue
(const _Compare&, const _Sequence&) [with _Tp = event,
_Sequence = std::vector<event, std::allocator<event> >,
_Compare = std::less<event>]'
samp50.cpp:14: instantiated from here
/usr/include/c++/4.2.1/bits/stl_function.h:227:
error: passing 'const event' as 'this' argument of
'bool event::operator<(const event&)' discards qualifiers



529 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 03:59:44 ]
const忘れてるぜ

530 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:01:44 ]
- bool operator<(const event &a);
+ bool operator<(const event &a) const;

- bool event::operator<(const event &a) {
+ bool event::operator<(const event &a) const {



531 名前:デフォルトの名無しさん [2008/01/10(木) 04:02:27 ]
>>529
えっ,どこですか?
priority_queue<const event>
としてみたのですがダメ。(コンパイル通らず)


532 名前:デフォルトの名無しさん [2008/01/10(木) 04:06:19 ]
>>530
コンパイル通りました!
でも意味わかんねえス。今まで演算子のオーバーロードでそんなところに
constつけたことなかったよ。どういう意味ですか?


533 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:06:26 ]
笑ってしまっていいのだろうか……

534 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:07:17 ]
笑えよ・・・

535 名前:デフォルトの名無しさん [2008/01/10(木) 04:10:32 ]
>>533,534
だんだん自分でも怖くなってきた。もしかして自分は、すごく基本的なことを
知らないとか言ってる?


536 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:11:30 ]
.>>528
そのoperator<()が非constメンバだから、非constなオブジェクトからは呼び出すことができない。
書き換えを伴わないメンバ関数は、全てconstメンバにしておくべき。

537 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:11:58 ]
うぜぇな
ttp://www.google.co.jp/search?source=ig&hl=ja&rlz=&q=%E3%83%A1%E3%83%B3%E3%83%90%E9%96%A2%E6%95%B0+const&meta=lr%3Dlang_ja
これでも見てろ

538 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:12:13 ]
> 演算子のオーバーロードでそんなところにconstつけたことなかった
「演算子のオーバーロード」を「メンバ関数」に置き換えても、やっぱり同じことが言えるんだとしたら、
かなり基本的なことを学び損ねてると思う。
そうでないなら、まぁちょっとした誤解だから、すぐ知識の修正もできるだろうけど。

539 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:24:38 ]
bool operator<(const &TYPE)const;じゃないとダメなのはpriority_queueの問題でしょ

あと
>そのoperator<()が非constメンバだから、非constなオブジェクトからは呼び出すことができない。
「constなオブジェクトからは呼び出すことができない」じゃね


540 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:38:54 ]
>>537
微妙・・・



541 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:48:34 ]
priority_queueは内部でstd::lessを使うんだが、これが>>526の場合は
bool less(const event &a, const event &b){ return a < b; }
こんな感じなので、eventクラスのoperator<がconstメンバ関数じゃないとエラーになる


542 名前:デフォルトの名無しさん [2008/01/10(木) 05:41:08 ]
>>536-541
色々こんな時間にありがとうございます。
自分の中ではとりあえず、
「priority_queue用に独自classに<(less)を定義する時は、引数と関数にconstをつける必要あり」
というルールで記憶することにしました。そして、
かなり基本的なことを学び忘れているようなので、とりあえず関連記事探して独習c++でも逝っときます。
関数にconstをつけるのは本当に知らなかった。メンバ変数にconstをつけるのは
意味なし、くらいに思っていたし。。
関数にconstつけるのは、メンバ変数を変更しない、という意味でいいんですよね?

あと、537が書いてくれたリンクはわかりやすかったんですけど、540の微妙…という
コメントは、どうしてですか?



543 名前:Gori [2008/01/10(木) 05:46:34 ]
これら どの様な違いが有るのでしょうか?

Microsoft Visual C++ 6.0 Standard Edition

Microsoft Visual C++ 6 Professional

Microsoft Visual C++ 6.0 Enterpris

544 名前:つらいぜ独学 [2008/01/10(木) 06:45:35 ]
ちょっと質問です。
#include<stdio.h>
void aaa(int test){
int i = 1;
if(test == 5)
return;
printf("あ");
test += i;
aaa(test);
printf("え");
}
int main(void){
int test = 0;
aaa(test);
return 0;
}
の結果を あああああえ になるかと思ってたんですが、
実際は あああああえええええ でした。
これは何ででしょうか?


545 名前:デフォルトの名無しさん [2008/01/10(木) 07:05:59 ]
aaa()に入ったら、引数が5でないかぎり
printf(え)を実行するじゃん。引数が5になるまで、
aaa()は5回呼ばれる。

546 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 08:23:17 ]
>>544
再帰関数の中で、再帰する前の処理をA、自分自身の呼び出しをB、再帰した後の処理をCとすると
その再帰は(ABC)になってるわけだろ。
で、ここのBをまた(ABC)に置き換えて…ってのを5回(4回か?数えるのメンドクセ。)やって
最後のときはBを消すって形で終わってるから最終的な形としては
(AAAAACCCCC)になる。

547 名前:536 mailto:sage [2008/01/10(木) 10:25:10 ]
>>539
そうそう、間違えた。訂正感謝。

>>542
微妙。まともじゃない解説をしているサイトも検索されるから。

548 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:11:58 ]
// ABase.h
class ABase {
public:
 typedef std::vector<B> VectorB; // Bは完全型でなくてはいけない?
 virtual VectorB::iterator F(const VectorB& vec)=0;
 ...
}

// B.h
template <...> // テンプレートクラスのため.hと.cppにわけることができない
class B {
public:
 void F() {
  pABase_->...; // ABaseの関数を呼び出す
  ...
 }
private:
 ABase* pABase_;
};

ABaseはBの定義が必要、BはAbaseの定義が必要という状態になってしまい、困っています。
こういった循環参照を避ける手法はないでしょうか?

549 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:17:13 ]
質問させてください。
C++言語で
interface A {
virtual void MesA() = 0;
};
interface B {
virtual void MesB() = 0;
};
interface C : public A,public B {};
class D : public C {
public:
void MesA() { printf("A class\n"); }
void MesB() { printf("B class\n"); }
};
int main() {
D d;
void *p = (D *)&d;
B *bbb = (B *)p;
B->MesB();
}
こうするとAのMesAのメソッドが呼ばれてしまいます。
Cの中身は空ですが、他のメソッドが書かれています。(このサンプルでは関係ないと思うので空にしました)
変数pを一度C型にキャストしてからB型にキャストするとうまくいくのですが、
なるべく、そうはしたくないので困っています。
原因、解決策のわかる方教えてください。
環境
Visual Studio 2003 .NET
2005でも同じでした。
改行が多すぎるとエラーが出たのでみずらくてすいません。

550 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:47:53 ]
>>548
これでどうかなぁ
でもかなり無理矢理な感

// ABase.h
#include "B.h"
#ifndef ABase_h
#define ABase_h
class ABase {
...
};
#endif

// B.h
#ifndef B_h
#define B_h
class ABase;
template <...>
class B {
public:
void F();
private:
ABase* pABase_;
};
#include "ABase.h"
template <...>
void B<...>::F() {
pABase_->...;
};
#endif



551 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:54:24 ]
>>549
void*を元と異なるクラスにキャストしてるのが原因かと

>void *p = (D *)&d;
>B *bbb = (B *)p;

ここ(pはD*なのかB*なのか??)を

void *p = (B *)&d;
B *bbb = (B *)p;

とする(pはB*を保持)か、あるいは

void *p = (D *)&d;
B *bbb = (D *)p;

とする(pはD*を保持)

552 名前:548 mailto:sage [2008/01/10(木) 13:17:57 ]
>>550
レスthx

しかし、できれば書きたくないコードですね。
設計を見直した方がいいのかなぁ。

553 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:47:15 ]
>>552
こういう風にしてみるとか

// ABase.h
#include "Bdecl.h"
class ABase { ... };

// Bdecl.h
class ABase;
template <...>
class B { ... };

// Bimpl.h
template <...>
void B<...>::F() { ... };

// B.h
#include "ABase.h"
#include "Bimpl.h"

554 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:38:23 ]
標準偏差を求める計算式はどのようにしたらいいでしょうか?

555 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:43:15 ]
ググレカス

556 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:57:59 ]
レスありがとう御座います。

説明不足の部分がありましたので、補足させて頂きます。

実際この処理を使う場面では

//interface AはA.hに定義
//interface BはB.hに定義

//callbackA.cpp
#include "A.h"
void callbackA(void *p) {
A *a = (A *)p;
a->MesA();
}
//callbackB.cpp
#include "B.h"
void callbackB(void *p) {
B *b = (B *)p;
b->MesB();
}
引数pにはDクラスのアドレスが入っているとします。

このように
callbackA.cpp中ではAのinterfaceのみが公開され、
callbackB.cpp中ではBのinterfaceのみが公開されるようにしたいのです。

やはり>>551さんのようにcallbackソースの中でDやCの定義を公開して
キャストするしかないのでしょうか?

説明不足で申し訳ありませんでした。

557 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:24:17 ]
>>556
callbackAを呼ぶときはpにはA*をvoid*にしたものを渡せばいいし
callbackBを呼ぶときはpにはB*をvoid*にしたものを渡せばいいが
どうしてもpにはD*を渡したいけどDは公開できないというのはわりと無理め

いくらか妥協するなら例えば
class Z {
virtual void dummy(){}
};
みたいなダミーを用意して
class D: public C, public Z { ... };
としてDにZを継承させ
void callbackA(Z *p) {
A *a = dynamic_cast<A *>(p);
a->MesA();
}
って方法もある

引数の型を変えたくないなら
void callbackA(void *p) {
A *a = dynamic_cast<A *>((Z*)p);
a->MesA();
}
とか

558 名前:デフォルトの名無しさん [2008/01/10(木) 15:24:55 ]
cでは変数のアドレスを表示するときに
printf("%p", i);
とかやってましたが、これをcout <<
でやるにはどうすればよいでしょうか?


559 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:34:09 ]
>>558
basic_ostream& operator<<(const void*)
が定義されてるから、
cout << static_cast<void*>(i);
だな。

560 名前:デフォルトの名無しさん [2008/01/10(木) 16:04:19 ]
>>559
ありがとうス。実際は
void func(T& a)
{
cout << static_cast<void *>(&x);
...
}
としました。




561 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 16:13:28 ]
うわ、ありえねぇ。

562 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 16:59:17 ]
変数xが1〜6の間ならって表現したいなら
if(1<=x<=6){

でいいのでしょうか?間違ってるなら正しい方法おしえてください・・

563 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:02:36 ]
if (1 <= x && x <=6) {

564 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:35:21 ]
if (x >= 1 && x <= 6) ;

565 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:48:21 ]
switch (x) { case 1: case 2: case 3: case 4: case 5: case 6:

566 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:53:14 ]
>>565
xが整数じゃない場合もそれでOKなんですね? ありがとうございました。
これで課題が終わりそうです。

567 名前:562 mailto:sage [2008/01/10(木) 17:54:27 ]
ありがとうございます、そのふたつはどっちでもいいんでしょうか?

568 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:59:25 ]
1が前になったのは、質問者のをそのままコピーしたからだけど
別にどっちでもいい。

569 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:43:51 ]
>>566
いいわけねーだろバーカチョーン

570 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:50:12 ]
>>566は明らかに嫌味で言ってると思う。



571 名前:デフォルトの名無しさん [2008/01/10(木) 20:36:58 ]
初心者です。
VisualC++ win32API
で、質問なんですが
VisualStudioでプログラムを実行したらちゃんと動くのに
exeファイルをクリックして実行するとフリーズしたりするのはなぜなんでしょうか?


572 名前:448 [2008/01/10(木) 20:42:18 ]
きたーーーーーー
解決しました。
コンソールアプリ→WINDOWSアプリに設定を変えるタイミングが悪かったみたいです。。
申し訳ありませんでした
あと>>456でもらったソースを貼り付ける必要がありました。
とにかく、おかげさまで先へ進めました。レスくれた人たち、まじでありがとうございます。

573 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 20:43:16 ]
>>571
お前の書いたプログラムにバグがあるからだろうと思う

574 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:17:05 ]
C言語に限ったことではないのですが、浮動小数点の変数で
float f = 1.0f
とすると、その変数型の可能な限り、1.000....となるのでしょうか
それとも小数点第2位以下は不定となるのでしょうか

575 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:19:44 ]
>>574
精度の範囲で1.000...
ってちゃんとしてくれるよ1.0に関してはな!

576 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:22:49 ]
早い返答ありがとうございます。
どういう場合に、まずいことが起こるんでしょう?
サンプルコードを見ると、1.fなどはほとんど無く1.0fという数字ばかりなのですが、
もしかして関係してるのでしょうか。

577 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:31:08 ]
0.1 とか2進数で無限小数になるから途中で打ち切られる。

1.f と 1.0f に特に違いは無いが、
言語によっては . で終われない場合もあるので
1.0f で慣れておいた方が良さげ。

578 名前:562 mailto:sage [2008/01/10(木) 22:39:57 ]
すみません、1〜6のときあああって出力して、6〜10ならいいいって出力、それ以外はうううって
出すのってこれでいいんですよね?なんかコンパイルするとエラーがでてしまうのですが・・
void aa(){
if (1 <= x && x <=6) {
printf("あああ\n");
}
else if(6 < x && x <=10){
printf("いいい\n");
}
else{
printf("ううう\n");
}
}

579 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:42:09 ]
x って何?

580 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:42:57 ]
xを定義しなさい



581 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:47:23 ]
int x =0;とかを2行目にいれればいいんですか?

582 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:50:02 ]
>>578
> なんかコンパイルするとエラーがでてしまうのですが・・
これは「何かが起こったんですが、これは何でしょう?」って言ってるのと同じだ。
ちゃんと質問しろ。

583 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:50:27 ]
x をどうやって指定するかを考えれば自ずと分かる

584 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:51:58 ]
何をしたいプログラムなんだ?
int x =0;とか入れればエラーは消えるが ううう しか出んプログラムになるぞ。
入力した数値や計算結果を使って出力を変えたいんじゃないのか?

585 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:54:53 ]
数字の定義は外部というか、プログラムの前の部分でしてあるはずなんです。
二人でやる課題で、xを定義とか入力に応じて帰るとかその辺は違う人がやるので・・

586 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:56:54 ]
>>585
どっちにしろ、関数aa()にxを入れなきゃ駄目だろ。

587 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:59:14 ]
外部、例えばmain関数でxが定義されていても、その関数からxを直接参照することはできない。
教科書でローカル変数とかグローバル変数とか調べて見れ。

588 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:12:47 ]
ええ、そうなんですか・・・
外部のxを読み込めみたいな命令ってどうやるんでしょうか・・

589 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:13:45 ]
>>588
いいから教科書で勉強しなおすんだwwwwwww

引数とかグローバル変数とか分からないの?

590 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:16:34 ]
お前は一生1から10まで人に聞いてすごすつもりかw
関数を勉強する最初の授業で習うようなことなんだから、ノートを見直して来い。
ノート取ってないなら教科書の関数のページ開いて嫁。



591 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:25:19 ]
教科書は一応あるけど何を言ってるのかよくわからないです。
外部の変数どう読み込むかって書いてないような・・

592 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:40:36 ]
そうだ、諦めよう!

593 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:47:01 ]
>>591
ITMediaの記事で
ジャストのおっさんが

人に聞くのがコミュニケーション能力かつ
正しい成長方法だっていったぞボケ

594 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:51:30 ]
warata
全く勉強しないで終わらせる気なのか?

595 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:53:23 ]
void aa(){
extern int x;
if (1 <= x && x <=6) {
printf("あああ\n");
}
else if(6 < x && x <=10){
printf("いいい\n");
}
else{
printf("ううう\n");
}
}

596 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:55:13 ]
>>593
聞いた事を元に、それなりに自分で考える時間も取らないと身に付かん。

597 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:11:54 ]
ありがとうございます。そんなコマンドあったのですね・・・
ご迷惑おかけしました

598 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:23:25 ]
formが出たときに何ができるのか分からないです。

OS:windowsXP

599 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:39:42 ]
エスパー様、>>598がお呼びです。

600 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:59:14 ]
自分で試せばいいのかもしれないですが、その力がないですorz
正確な測定方法でも良いのでご教示ください

Cとなんでもよいのですが、例えばC#やVB
ある文字列の中身の特定文字列を検索する場合だとします。
AEFASDEAEASDDという文字列があった中でDEAを検索する場合
Cならばまず文字列内を一文字ずつループでDを検索し、見つかればその直後にE、その直後にAと探していき
発見することができますが、C#やVBでは文字列の検索機能(メソッド?)があります

一見ループと条件分岐とメソッドの呼び出しになるのでどうしても前者がはやいとは思えません
ですが実際は前者がはやいのでしょうか?



601 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:02:33 ]
strstrでも使っとけ

602 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:02:57 ]
メソッドの方が多分ネイティブルーチン呼んでるから速いと思う。

603 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:04:44 ]
>>600
何故そう思うのですか?
或いは、何故Cならば検索する関数がないと思うのですか?

604 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:05:05 ]
>>602
んなこたーない。

605 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:08:08 ]
ああ、C と C# の比較か。
それなら C が速いんでないかい。

606 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:08:13 ]
>>604
お前の頭の悪さと
醜悪な固定観念にワロタw

607 名前:604 mailto:sage [2008/01/11(金) 01:10:08 ]
>>606
正解は、「一概には言えない」となる。
従って、「メソッドの方が云々」なんてくだらない思い込みに対しては「んなこたーない」で充分。

608 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:11:29 ]
そういう事を言えるのは、一概には言えないことを確かめてからだな。

609 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:11:39 ]
>>599
C++buridaの話なんですけど
フォトショをつなげると何かあるんでしょうか。

610 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:12:05 ]
C++ぶりだ?



611 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:12:06 ]
文字の検索アルゴリズムはちょっと面白い。興味があったら色々調べて見なさい。

612 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:13:13 ]
BM法と単純検索以外なんもねーだろ
あとはつまんねー長たらしい正規表現か



613 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:13:43 ]
KMP とかもあるお

614 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:17:32 ]
>>609
エスパー求む!

615 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:19:39 ]
僕に合った良い病院はないでしょうか。

616 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 02:16:32 ]
>>585
二人でやる課題なのに、各自の担当部分のインタフェース(データの受け渡し方法)を取り決めないのか?
それじゃ仮に君がC/C++の文法を理解していたとしても無理だ。


617 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 02:25:59 ]
>>609
正直な話、あんたが何を言っているか本気でわからん。
「C++burida」でググってみたらTOPに「ダイコンの豆知識」がでてきたぞ。
PhotoShopをつなげるというのも意味不明、何につなげるんだ?
そもそもPhotoShopはソフトウェアの名称で、つなげるという動詞を使うことは中々無いと思う。
>>598時点でのformに関してもあまりにも抽象的な単語で何を意味しているか不明。

順番に端折らずに、お前の聞きたいことを丁寧に書き込むんだ。
すれ違いならエロい人が誘導してくれる。

618 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:07:11 ]
大根に危うく吹きそうになった。そんなもん調べんなw

619 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:18:16 ]
プログラマ的に言うとPhotoShopなんてソフトウェアはない

620 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:27:41 ]
>>619
はいはい



621 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:28:53 ]
鰤大根かw

622 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:47:27 ]
そういえばこの冬はまだ一度も作ってないな。

623 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 04:05:52 ]
>>617
C++BuilderとFormはまあ判った。
フォトショとは何なのか(Photoshopとしても何の関係があるのか)判らん。

もちろん、何を質問しているのかなど全然判らん。

624 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 08:06:56 ]
CorelDRAWはVBAで制御できたよ('(゚∀゚∩

今のバージョンは知らんが

625 名前:デフォルトの名無しさん [2008/01/11(金) 12:33:03 ]
STLの中で、make_heap()などのヒープ関連のアルゴリズムの
意味がわかりません。適当なコンテナにmake_heap(begin,end)すると、
先頭に一番大きい要素がくる、それだけなんですよね?
それじゃあ、make_heap()とか、存在している意義がないような。


626 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 13:08:25 ]
>625
「それだけ」ではないです。ヒープというデータ構造について調べてみるといいよ。

627 名前:デフォルトの名無しさん [2008/01/11(金) 13:51:39 ]
>>626
調べてみると、
ヒープというデータ構造は、データの中から最大(最小)値を取り出すのに
いいということがわかりました。

make_heap(begin,end)
pop_heap()begin,end)
make_heap(begin,end-1)
pop_heap()begin,end-1)
make_heap(begin,end-2)
pop_heap()begin,end-2)
...
で、ヒープソート相当のことをできるんですね。

でも自分では使いそうにないなあ。

628 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:17:30 ]
STLのlistでコンテナの入れ替え(コンテナの中身ではない)を
する方法ってありますか?

629 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:24:57 ]
>>628
その「コンテナの入れ替え」を定義してください。

630 名前:デフォルトの名無しさん [2008/01/11(金) 14:32:04 ]
型の違うもの同士の比較について教えてください。
structure_card_information card_information;
unsigned char card_idm[8];
unsigned char card_pmm[8];
card_information.card_idm = card_idm;
card_information.card_pmm = card_pmm;

//カード情報の読み込み処理

//読み込み結果の表示
print_vector("card PMm:", card_pmm, sizeof(card_pmm));

  //初回起動ならIDmをfile.txtの先頭に入力する
  fp = fopen("file.txt","r");
  char *c;
  //cの中にfpの一文字目が入る
  fgets(c,1,fp);
  fclose(fp);
  //他のカードで端末に接触したとき接触したカードのidmを追加登録する
if(c != card_idm){
print_vector("card IDm:", card_idm, sizeof(card_idm));

//カードへの書き込み処理を行う

というプログラムを作っています。
読み込んだcard_idmというものがchar型のcと違う場合カードへの書き込み処理をする
というプログラムにしたいのですがcard_idmというものはchar型ではないのでどのように比較処理をすればいいのかわかりません。
どのように比較すればいいのでしょうか。もしよろしければ教えてください。



631 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:39:38 ]
if(strncmp(c,card_idm,strlen(c)){
hogehoge;
}

632 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:42:43 ]
>>630
一年諦めて、まともにCを勉強してから卒研に取り組んだら?
fgets()の使い方が阿呆すぎて話にならないんだけど。

633 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:55:14 ]
ポインタもまったく理解できてないな

634 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:15:15 ]
>>628
swapのことか?ならSTLコンテナ全て持ってる。

635 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:37:11 ]
>>629
コンテナの連結状態を変えたいんです

>>634
swapだと中身のコピーによる値の入れ替えになるんじゃないでしょうか?

例えばlistのコンテナが 1,2,3,4,5 と繋がってる場合に、3,4,5 を切り離して、
1と2の間に挿入し、1,4,5,6,2 という形にしたい場合に、中身の入れ替えでは
なく、コンテナの連結先のみを書き換えることで行う方法が無いかを知りたい
のですが。

636 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:40:09 ]
訂正
1,4,5,6,2 ではなく、1,3,4,5,2

637 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:47:00 ]
>>635
splice

638 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:02:13 ]
>>635
ならspliceメンバー関数だな

639 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:04:20 ]
現在VS2008のC++でコンソールアプリケーションを弄っていますが、
_beginthreadexでルーチンを呼び出してもメインスレッドで処理されてしまいます。
どなたかお助けくらさい。。。

640 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:06:25 ]
普通はそうならないので、ソース見せてよ








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<166KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef