5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2005/12/29(木) 12:48:03
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.24【環境依存OK】 (実質23)
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

2 :デフォルトの名無しさん:2005/12/29(木) 12:56:09
2げとー

>>3
m9(^Д^)プギャー

3 :デフォルトの名無しさん:2005/12/29(木) 13:04:45
最近前スレとまったく同じスレタイにするの流行ってんの?

くだすれVisual C++(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1135817069/
くだすれVisual C++(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1118781438/

【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1135828083/
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/

4 :デフォルトの名無しさん:2005/12/29(木) 13:58:30
どこでメモリリークしてるか検知したいときってどうする?

5 :デフォルトの名無しさん:2005/12/29(木) 13:59:32
>>1をまったく読まないの流行ってんの?


6 :5:2005/12/29(木) 14:00:52
誤爆スマソ

7 :6:2005/12/29(木) 14:01:42
誤爆スマソ

8 :デフォルトの名無しさん:2005/12/29(木) 14:06:08
>>4
そんな便利なものあるなら知りたい。
根性で探すしかないよ

9 :デフォルトの名無しさん:2005/12/29(木) 14:07:05
無いわけではない。

10 :デフォルトの名無しさん:2005/12/29(木) 14:09:25
>>4
(仕事などでそれが使えるなら)メモリリークを検出するツールを使う。
そうでないならメモリリークを起こしそうなところのコードを読み直すか、
メモリリークの状況を再現できるように維持しつつコードを削って絞り込むか、
アクセス回数を記録できるmalloc()/free()などのダミールーチンで追い込む。

11 :デフォルトの名無しさん:2005/12/29(木) 14:17:30
要は根性

12 :デフォルトの名無しさん:2005/12/29(木) 14:18:10
_CrtSetDbgFlag

13 :デフォルトの名無しさん:2005/12/29(木) 14:30:24
ツールはあっても結局最後は根性。
人間にしかリークと判定できないケースもままあるしね

14 :デフォルトの名無しさん:2005/12/29(木) 14:30:57
根性って・・・

15 :デフォルトの名無しさん:2005/12/29(木) 14:34:34
ツールでリーク全部取れると思ってるの?

16 :デフォルトの名無しさん:2005/12/29(木) 14:34:57
void*xmalloc(size_t sz){
    void*p = malloc(sz);
    FILE*fp = fopen("log.txt","a");
    fprintf(fp,"new %p %p\n",(&sz)[-1],p);
    fclose(fp);
    return p;
}
void xfree(void*p){
    FILE*fp=fopen("log.txt","a");
    fprintf(fp,"delete %p\n",p);
    free(p);
    fclose(fp);
}
#define malloc xmalloc
#define free xfree
自分はこんな感じに呼び出し元のアドレスと確保したアドレスのペアをログに吐き出して、
開放してないメモリの呼び出し元をmapファイルを元に探し出すことが多いかな。

17 :デフォルトの名無しさん:2005/12/29(木) 14:41:12
単に開放し忘れなら簡単な部類。ツールでも上のやり方でも
見つけられる。厄介なのはそうじゃない場合。

18 :デフォルトの名無しさん:2005/12/29(木) 14:41:32
環境すら書かない奴は放っておく

19 :デフォルトの名無しさん:2005/12/29(木) 14:43:38
バイナリで提供された他人の作ったライブラリがリークってたり。

20 :デフォルトの名無しさん:2005/12/29(木) 14:44:47
環境云々ではなくリークの一般論でも話はできるな。

21 :デフォルトの名無しさん:2005/12/29(木) 14:46:35
>>17
開放わすれでないやつって
確保領域外のアクセス とか 解放後のポインタをそのまま使ってたり とかの部類?

22 :デフォルトの名無しさん:2005/12/29(木) 14:47:32
>>20
>>4が何を望んでるかわからんだろ?
汎用的な物なのか、環境依存の物なのか。
あれもこれも網羅するのは無駄すぎ。

23 :デフォルトの名無しさん:2005/12/29(木) 16:19:11
ひとつのネタなんだからいいんだよ。それで話を
膨らませて無駄話をするも一興

24 :デフォルトの名無しさん:2005/12/29(木) 16:27:49
Win32なら

#include <crtdbg.h>
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

で、解決だな。
しかし、どうも配列の開放忘れが検出できてない希ガス。

char *unko = new char[1024];

delete unko;//←delete [] unko;とやらなければならないけどメモリリークにならない。

な。

25 :デフォルトの名無しさん:2005/12/29(木) 17:03:15
>>21
それはまた話が違う。「解放後のポインタをそのまま使ってたり」
ってのは単に不正アクセス。

アプリとしては要らなくなったデータなのにリストにぶら下げっぱなしに
しているような場合を考えてみれば、機械的に不要かどうかは
判定が難しいでしょ?







26 :21:2005/12/29(木) 17:14:18
>>25
アプリ終了時に開放されることは確認できてるけど、
ある作業スパンで見た時に不要になったにも関わらず、開放されず浮遊してるやつ って認識でオケ?

判定も難しいし、ガベージコレクションの分野だねぇ (これはこれで色々ありそうだが…

27 :デフォルトの名無しさん:2005/12/29(木) 17:53:56
>>26
そうそう。アプリ終了時に開放されても仕方がない。アプリが
動いてる時に不要なんだから。
プログラムからいつでも使える状態で忘れてしまっていると、
ガベコレの対象にも出来ない。だからJava使えばリーク問題と
無縁とか思ってるのも間違い。
一番厄介なリークはガベコレがあっても結局は人間がつぶす
しかないんよん。



28 :デフォルトの名無しさん:2005/12/29(木) 18:41:23
>24
デストラクタがないオブジェクトは、要素の数を知る必要がないから
deleteもdelete[]も実装が一緒でも不思議ではない。

29 :デフォルトの名無しさん:2005/12/29(木) 18:52:27
質問です。
入力待ちしているscanfを終了させる方法ありますか?
WIN32

int taskA(void)
{
  char buf[1024];
  scanf("%s",buf); // ←★ここで入力待ち
  // タスク終了時の処理
  xxx();
}

int main(void)
{
  //スレッド生成
  HANDLE h = ::CreateThread(,,taskA,,,);

  //何かの条件が発生したらスレッド終了
  // ★ここで何か処理を入れて、scanfから戻したい
  ::WaitForSingleObject(h,60*1000);
  ::CloseHandle(h);
}


30 :デフォルトの名無しさん:2005/12/29(木) 19:12:59
ターミネート

31 :デフォルトの名無しさん:2005/12/29(木) 19:23:37
>>29
外部からsignal。

32 :デフォルトの名無しさん:2005/12/30(金) 10:38:41
WriteConsoleInput で何とかできないかな?

33 :デフォルトの名無しさん:2005/12/30(金) 12:12:50
(´ー`)おれにまかせろ

34 :デフォルトの名無しさん:2005/12/31(土) 10:43:33
mingwでコンパイルする時
Cファイルに関数を宣言してるだけでHファイルで宣言してないのに
他Cファイルからその関数を呼び出せてしまいます
ローカル関数として使いたいのですが…どうしたらよいでしょうか?

35 :デフォルトの名無しさん:2005/12/31(土) 10:45:18
>>34
関数をstaticにする

36 :34:2005/12/31(土) 10:50:00
>>35
解決しました・・こんな簡単だとは
ありがとうございます

37 :デフォルトの名無しさん:2005/12/31(土) 13:23:02
で static の使い方を勘違いしたまま大人になるんだな

38 :デフォルトの名無しさん:2005/12/31(土) 15:08:08
別に、使い方合ってると思うが?

39 :デフォルトの名無しさん:2005/12/31(土) 17:19:02
質問です。XP、.NET です。

CreateWindow にてウィンドウを作成したのですが、
ウィンドウのキャプション部分?(メニューではなく、Windows デフォルトで、ウィンドウタイトルなどが表示される青い部分)が反応しません。
つまり、キャプションを D&D してもウィンドウが動かず、[×] ボタンをクリックしてもボタンがへこむ様子もありません。
(つまり、全く反応がありません。)
考えられる原因はないでしょうか。

ツールバーから「閉じる」を選んだり、Alt+F4 での処理は受け付けれています。
また、[×] をクリックしたとき、WM_LBUTTONCLICK は飛んできているようです。

原因に見等が全くつかないので、どこの部分のソースをさらせばいいのかも分かりませんが、
とりあえずウィンドウの構築部分だけでも示しておきます。

蛇足かもしれませんが、ウィンドウ自体をクラス化しており、
ウィンドウプロシージャはそのクラスの static なメンバ関数です。
このクラスを継承したクラスにてウィンドウを作成したりしているので、
メッセージの処理がうまくいっていない可能性もあります。

よろしくお願いします。


(続く)

40 :39:2005/12/31(土) 17:19:37
// ウィンドウクラスの設定
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)HogeProcPre
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetInstance(); // インスタンスを取得するグローバル関数
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "hogewindow";

if (!RegisterClassEx(&wc))
 return false;

// ウィンドウの構築
hWnd = CreateWindow(wc.lpszClassName, "Hoge Window", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
 NULL, NULL, GetInstance(), this);

if (hWnd == NULL)
 return false;

return true;


41 :デフォルトの名無しさん:2005/12/31(土) 18:37:20
>>39-40
どっちかっていうとこっちではあるまいか?
http://pc8.2ch.net/test/read.cgi/tech/1133798345/

42 :デフォルトの名無しさん:2005/12/31(土) 19:22:34
>>39-40
>>41のスレへ移動したうえで、ウィンドウプロシージャの中身も書け

43 :デフォルトの名無しさん:2006/01/01(日) 18:35:09
gccでグローバル変数が初期化されないんですけど…なんででしょうか?

44 :デフォルトの名無しさん:2006/01/01(日) 19:07:13
状況分からなさ杉。

どうせ別の変数で初期化しようとして、
変数の初期化順が不定なもんだから
変になってるだけだとは思うが。

45 :デフォルトの名無しさん:2006/01/01(日) 19:34:34
グローバルが初期化されない状況って言うと、
組み込み系か? ならそういうケースもあるよ。

46 :デフォルトの名無しさん:2006/01/01(日) 19:44:14
>>44
すいません、今度から関連するコードは出します。。
>>45
ズバリ組み込みです。有り得るケースなのですか。しょうがないので関数内で初期化します

ありがとー

47 :デフォルトの名無しさん:2006/01/01(日) 20:01:25
つーかグローバルなんて、mainの最初できっちり処理するもんだと思ってたんだが

48 :デフォルトの名無しさん:2006/01/01(日) 21:35:38
大域変数にしろ静的変数にしろ初期化する癖はつけておいたほうが良いと思うなあ
特に理由は無いけども

49 :デフォルトの名無しさん:2006/01/02(月) 10:49:00
しっかりしたOS上のC++じゃないなら、グローバルの初期化は
スタートアップがサポートしていない場合もある(ほとんどか)

組み込み系ならmain内で配置new使うのがお手軽だねえ

50 :デフォルトの名無しさん:2006/01/02(月) 13:42:54
新年とかかっているのか!

51 :デフォルトの名無しさん:2006/01/02(月) 18:56:28
#include<stdio.h>
#include<string.h>

int main()
{
char *a="aiueo";
char *b;
int c,d,e;

c=strlen(a);
e=c-1;
for(d=0;e!=-1;d++){
*(b+d)=*(a+e);
e--;
}
*(b+d)='\0';
printf("%s\n",b);
return 0;
}
Windows98系では動きますが、Windows2000では動きませんでした。
おそらくunicode関係だと思うのですが、Windows2000でも
動くようにするにはどうすればいいのでしょう?ワイド文字?(VCToolKitです)

52 :デフォルトの名無しさん:2006/01/02(月) 18:58:44
>>51
unicodeとか関係ねー

bが未初期化。
適当な配列を宣言してその先頭アドレスを代入するか、動的確保してください

53 :デフォルトの名無しさん:2006/01/02(月) 20:19:55
char *a="aiueo";
とかやってる時点でおわっとる

54 :デフォルトの名無しさん:2006/01/02(月) 21:38:13
>>53
別にそれ自体は問題ないがな
読み取り専用の文字列を作るのに普通に使うし

55 :デフォルトの名無しさん:2006/01/02(月) 22:18:40
>>53
何も問題ないが

56 :デフォルトの名無しさん:2006/01/02(月) 22:19:45
>>53の頭が問題なんじゃ・・・

57 :デフォルトの名無しさん:2006/01/02(月) 22:35:20
IEコンポーネントを使ってブラウザを作っているのですが、
JavaScriptの"Window.open()"とかで新しくウィンドウが開いたときに
IEが開いてしまって、それにセッションが引き継がれないようで、
SSL通信を行っている場合に正常に通信できなくなってしまいます。
何かいい対処方法は、無いでしょうか。
また、実装方法について参考になるサイトとかありましたら教えてください。

58 :デフォルトの名無しさん:2006/01/02(月) 22:35:31
>>54-56 const つけてください。お願いします。

59 :デフォルトの名無しさん:2006/01/02(月) 22:50:06
古いC時代の慣習を未だに引きずっているオールドタイプな>54-56がいるスレはここですか。

60 :デフォルトの名無しさん:2006/01/02(月) 23:14:23
いったい何人の>>54-56タイプがソフト会社に関わってるのやら・・・恐ろしい・・・

61 :デフォルトの名無しさん:2006/01/02(月) 23:16:09
どっちも、何がどう問題なのか指摘しないのが笑えるw

62 :デフォルトの名無しさん:2006/01/02(月) 23:31:44
>>58が見えんのか?

63 :デフォルトの名無しさん:2006/01/02(月) 23:39:26
多分constを付けなかった時の危険性を語れと言ってるのではないかと

64 :デフォルトの名無しさん:2006/01/03(火) 03:28:08
constを付けない危険性なんて変数名をaとかにするのに比べれば…

65 :デフォルトの名無しさん:2006/01/03(火) 03:29:06
別にこのぐらいのプログラムだったら大して問題ない

66 :デフォルトの名無しさん:2006/01/03(火) 03:37:51
メモリ中にある"aiueo"を逆順に並べ替えて"oeuia"にせよ、
という宿題かもしれない。その場合const不要。

char *a = "aiueo";
char *b;
int i,l,n;

l=strlen(a);
n = l -1;

for(i=0; i < (l >> 1); i++){
  a[i] ^= a[n-i];
  a[n-i] ^= a[i];
  a[i] ^= a[n-i];
}

67 :66:2006/01/03(火) 03:43:28
とか書きながら
char * const a = "aiueo";
これもありか。

68 :デフォルトの名無しさん:2006/01/03(火) 03:46:12
>>66
仕様的にどうこうってのはわからないけど。
確保していない(ように見える)メモリを書き換えるのが違和感を覚える。
なんかイヤだ。

69 :デフォルトの名無しさん:2006/01/03(火) 04:16:09
>66
鼻から悪(ry

70 :デフォルトの名無しさん:2006/01/03(火) 04:20:24
>>66
なんでXORでスワップできるのか分からん・・・
どこかに説明されてるページ無い?

71 :デフォルトの名無しさん:2006/01/03(火) 04:36:51
>>70
1 ビットで交換できるか試せばいいじゃん。
引き算でも似たことができる。
ただ、はっきり言って変数使った方がいい場合が多い。

>>66
文字列リテラルの書き換えは鼻から悪(ry

72 :デフォルトの名無しさん:2006/01/03(火) 04:57:54
>>71
いや、交換できるか否かは紙とペンで試したから分かってるんだが
原理が分からない・・・

73 :デフォルトの名無しさん:2006/01/03(火) 05:09:20
>>72
例えば、a = 0x50、 b = 0x80と仮定する

a ^= b; → a = 0xD0、b = 0x80
b ^= a; → a = 0xD0、b = 0x50
a ^= b; → a = 0x80、b = 0x50

となる

これでわかるよな?

74 :デフォルトの名無しさん:2006/01/03(火) 05:19:22
>>72
aとbをXORして求められる値に、元のaかbのどちらかをXORすれば、もう片方の値になる
あとは自分で考えなされ

75 :デフォルトの名無しさん:2006/01/03(火) 05:20:46
>>73
理解した。dクス
要は同じ奴でXOR×2すれば元のに戻るってのを利用してるわけだな


楽しいじゃまいか(*゚Д゚) ムホムホ 

76 :デフォルトの名無しさん:2006/01/03(火) 08:56:03
http://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html

77 :デフォルトの名無しさん:2006/01/03(火) 08:59:12
>>73
それをVSでASM表示させてみたが、Temporary使うときよりコード増えてるな・・・

78 :デフォルトの名無しさん:2006/01/03(火) 15:38:05
>>77
読み出し演算書き込みやってんだから、abともにレジスタ
でもない限りはそう有利にもならないよ。
素直にテンポラリ使えってこった


79 :デフォルトの名無しさん:2006/01/03(火) 20:41:34
こんばんわ
使っている処理系はBCC5.5.1です
fopenのオープンモードに関してなんですけど

[temp.txtの中身]
こんばんわ
こんにちは

といったテキストファイルがあるとします。
そこでfopen()とfprintf()、fseek()を用いて

[temp.txtの中身]
おはよう
こんばんわ
こんにちは

0から"ごきげんよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をごきげんよう\nの後ろに持ってきたいのです。
ですが a 及び a+ ではfseek関数によりファイルポインタは移動できませんし
w 及び w+ ではファイルは破棄されてしまいます
残される所 r+ モードしかないのですが更新モードですので、

[temp.txtの中身]
おはようわ
こんにちは

となってしまう筈です(一応ですが確認しました ...
そこで、上記のような処理を実装するモードは(APIを除く) C(又はC++のofstreamも含めていいです)レベルで容易されていますでしょうか

80 :デフォルトの名無しさん:2006/01/03(火) 20:44:23
すみません誤植ありましたorz


0から"ごきげんよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をごきげんよう\nの後ろに持ってきたいのです。


0から"おはよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をおはよう\nの後ろに持ってきたいのです。

81 :79:2006/01/03(火) 20:45:11
まだあった(´・ω・`)


レベルで容易されていますでしょうか


レベルで用意されていますでしょうか

82 :デフォルトの名無しさん:2006/01/03(火) 22:30:10
>>79
ない。
やるとしたらいったんファイルの中身を全てメモリに読み込んで,
temp.txtに"おはよう"を書き出し,その後に続けて
読み込んでおいた元のファイルの内容を書き出していくことになる。

83 :デフォルトの名無しさん:2006/01/03(火) 23:14:37
>>82
やはりそっすかorz

84 :デフォルトの名無しさん:2006/01/04(水) 15:03:25
標準関数だけでは無理だね。
system("echo おはよう > foo ; cat temp.txt >> foo ; mv foo temp.txt");
とか。

85 :デフォルトの名無しさん:2006/01/04(水) 15:43:10
あらかじめ余分な空間を取っておけばそこに書き込めばいいわけだけど、
この手が使える状況ってのは限られてるね。

86 :sage:2006/01/04(水) 20:27:55
void test()
{
 string s1;
 string s2;
}

すいません質問です。この関数を抜ける時、
s2, s1 の順でローカル変数が開放される事は
保証されているのでしょうか?

87 :デフォルトの名無しさん:2006/01/04(水) 20:30:49
>>86
局所変数の開放順は保証されてなかった気がする

88 :デフォルトの名無しさん:2006/01/04(水) 20:34:21
>>87
そすか、気がするで十分です
どうも助かりました

89 :デフォルトの名無しさん:2006/01/04(水) 21:00:05
保証されてるだろ?
大域変数はダメだけど。

90 :デフォルトの名無しさん:2006/01/04(水) 21:06:54
コンストラクタが実行された逆順でデストラクタが実行されるんじゃなかったっけ?

91 :デフォルトの名無しさん:2006/01/04(水) 21:38:59
やっとあった

>6 Statements
>6.6 Jump statements
>6.6.2
>On exit from a scope (however accomplished),
>destructors (12.4) are called for all constructed objects
>with automatic storage duration (3.7.2) (named objects or temporaries)
>that are declared in that scope, in the reverse order of their declaration.


92 :86:2006/01/04(水) 21:58:03
>>91
お、お手数かけます
すこぶる確実ならそれに依存したコードをちと書きたかったもので。
ちとソースなり探してみます

93 :デフォルトの名無しさん:2006/01/04(水) 22:08:52
class A{
A();
virtual ~A();
};

class B : public A{
B();
virtual ~B();
};

class C : public C{
C();
virtual ~C();
};

void foo(){
C c;
}

このときに
コンストラクタ:A()→B()→C()
デストラクタ:~C()→~B()→~A()
っていうだけでしょ。
>>86のs1,s2の順は言語的には保証されてない(処理系依存)。

94 :デフォルトの名無しさん:2006/01/04(水) 23:28:18
>>93
>>91

95 :デフォルトの名無しさん:2006/01/04(水) 23:29:35
>>93
string s1;
foo();
string s2;

の場合はどうよ?

で、

string s1;
string s2;

の場合は?

96 :デフォルトの名無しさん:2006/01/05(木) 00:07:36
boost::mutex
とかはこの挙動を前提にしていると思うんだけど


97 :デフォルトの名無しさん:2006/01/05(木) 06:31:51
そんな開放順なんて気にするプログラム書いてる時点で素質無し。
逝って良し。

98 :デフォルトの名無しさん:2006/01/05(木) 06:32:50
int p = new int[0];
ってどうなりますか?

99 :デフォルトの名無しさん:2006/01/05(木) 07:01:50
>>98
コンパイルエラー

100 :98:2006/01/05(木) 07:15:27
じゃあ
p = new int[t];
でt=0のときはどうなりますか?

101 :デフォルトの名無しさん:2006/01/05(木) 07:42:19
コンパイルエラー

102 :デフォルトの名無しさん:2006/01/05(木) 07:42:58
つーか、tなんぞ関係なくコンパイルエラー

103 :98:2006/01/05(木) 08:09:56
あの、すみません、間違えました・・・
int *p = new int[t];
でした

104 :デフォルトの名無しさん:2006/01/05(木) 09:02:28
sizeof(int) × ( t + 1 )の領域が確保される

105 :デフォルトの名無しさん:2006/01/05(木) 09:15:09
>>103
こらこら嘘を書くな。

106 :98:2006/01/05(木) 10:42:58
で、あの、
int *p = new int[t];
t=0のときはどうなるんでしょうか・・・
*pは不定値?NULL?それとも確保されない?

107 :デフォルトの名無しさん:2006/01/05(木) 10:54:03
>>106
t が 0 のとき、 p はヌルではなく、ユニークな(他の int を指さない)ポインタの値になる。
それでも *p の値を参照すると未定義動作を引き起こす。

When the value of the expression in a direct-new-declarator is zero,
the allocation function is called to allocate an array with no elements.
The pointer returned by the new-expression is non-null.
[Note: If the library allocation function is called, the pointer returned is distinct from the pointer to any other object. ]

108 :107:2006/01/05(木) 10:55:05
あ、後半は規格(FDIS)から 5.3.4.7 の引用ね。

109 :98:2006/01/05(木) 11:05:00
>>107
ありがとうございます。つまり0になっては都合が悪いということですね

110 :デフォルトの名無しさん:2006/01/05(木) 11:15:24
>>109
ちがうよバカ。

都合が悪いかどうかはプログラムによって決まること。

111 :98:2006/01/05(木) 11:22:27
都合の悪くない使い方の例を教えていただけませんか?

112 :デフォルトの名無しさん:2006/01/05(木) 11:27:17
>>111
都合の悪い使い方の例を教えていただけませんか?

113 :98:2006/01/05(木) 11:29:35
>>112
*p の値を参照すると都合が悪いんですよね?

114 :デフォルトの名無しさん:2006/01/05(木) 11:30:55
>>113
要素数 0 なのに要素を参照するのはプログラムが間違ってると思わないか?

115 :98:2006/01/05(木) 11:33:12
つまりすべての場合で都合が悪いということですよね?

116 :デフォルトの名無しさん:2006/01/05(木) 11:42:58
>>115
ちがうよバカ。

正しいプログラムでは問題にならない。

117 :98:2006/01/05(木) 11:44:42
では重ね重ねすみませんが要素数0のpの使い道を教えていただけませんか?

118 :デフォルトの名無しさん:2006/01/05(木) 11:51:41
>>117
ヌルではないから、配列が確保されたかどうかの判別には使える。
他のポインタと違う値になるから、 std::map など連想配列のキーにも使える。

119 :98:2006/01/05(木) 11:56:59
なるほど・・・そのような使い道があったのですね。参考になりました

120 :デフォルトの名無しさん:2006/01/05(木) 12:08:33
「使い道がわからない=都合が悪い」もしくは
「都合が悪くない=使い道がある」とかいう思考回路もなんとかしとけよバカ。

121 :98:2006/01/05(木) 12:18:01
思考回路というより、言い方が不味かったですすみません

122 :デフォルトの名無しさん:2006/01/05(木) 12:43:47
>>121
思考回路も十分まずいよ、君の場合。

123 :デフォルトの名無しさん:2006/01/05(木) 14:32:53
C++で、"オブジェクトをファイルに保存して、また後でそのオブジェクトを使う"
というのはできますか?? ポインタをください。
環境は Debian で、gcc のバージョンは、3.3.5です。
オブジェクトの中身をStringにおとして、テキストでファイルに書き込んで、
それをまたよみこんで、オブジェクトを初期化するのは、どんくさいように思いました。


124 :デフォルトの名無しさん:2006/01/05(木) 14:40:22
うん、どんくさい。おまいがな。

125 :デフォルトの名無しさん:2006/01/05(木) 14:57:12
>>123
できない。というか、言語側では面倒を見てくれない。
C、C++は自分で全部やるか他の人が作ったライブラリを
使うかしかない。
ちなみに、インスタンスの構造はメンバだけじゃないから、
オブジェクトをべたで書き出して後で読み込んだら
吹っ飛ぶかもしれないよ(仮想関数テーブルへのポインタとかね)


126 :デフォルトの名無しさん:2006/01/05(木) 15:58:41
>>123
boost:serialization


127 :デフォルトの名無しさん:2006/01/05(木) 16:11:56
物理計算の勉強のため、C/C++ Linux/XWindow環境下でのグラフィックライブラリnxgraph
を導入したいのですがうまくいかないため、ご教授願います。

入手元、マニュアル:
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/nxgraph.html

環境はLinux,Fedora Core4 FullInstall デスクトップ環境:GNOMEです。

デスクトップ上にフォルダを作成しマニュアルの指示通り nxgraphライブラリ、
nxgraph.h,nxgraph.doc,elib.cc,elib.h,flib.cc,flib.cc,flib.h,gccx,gccxe,
gccxf を保存しました。
Xlinbのありかの調査、ですが、
Xlib.h は /usr/X11R6/include/X11/ に
libX11.so は /usr/X11R6/lib/ にありました。

次の操作の.cshrc などに上記ディレクトリ名を環境変数に記述するという作業はよくわからず、
ファイル検索にて csh.cshrc と言うファイルを見付けたのでその末尾に加えました。

その後サンプルプログラムもnxgraphライブラリを入れたデスクトップ上のフォルダに保存し、
gccx flower.cc など端末でそのディレクトリの位置で行いましたが
bash: gccx: command not found と出てコンパイルされません。

Linuxはここ数日に導入したもので基本操作が身についていないため導入できなかったのかも
しれませんが、どうしてもやり方が分からず途方にくれています。

128 :デフォルトの名無しさん:2006/01/05(木) 16:16:10
>>127
鼬害。

129 :デフォルトの名無しさん:2006/01/05(木) 16:41:56
>>127
リンク先はオールドタイプだな
あんまり勧めたくないところだけど

>次の操作の.cshrc などに上記ディレクトリ名を環境変数に記述するという作業はよくわからず、
>ファイル検索にて csh.cshrc と言うファイルを見付けたのでその末尾に加えました。
たぶんあなたはbashを使っているだろから
あなたのホームディレクトリにある
.bashrcに

exoprt XINCDIR='/usr/X11R6/include/X11'
export XLIBDIR='/usr/X11R6/lib'

を加えてください.
コンパイルする際のgccx,gccxe,gccxfは./gccx,./gccxe,./gccxfとするとうまくいくでしょう.
以下のように
./gccx sample.cc


130 :デフォルトの名無しさん:2006/01/05(木) 17:04:55
>>129
解答ありがとうございます。
ただ、
./gccx sample.cc
と言うように入力したところ、
bash: ./gccx: 許可がありません

と応答されコンパイルされませんでした。root権限でも同様です。
どうすれば許可を得られるのでしょうか。

また、
>リンク先はオールドタイプだな
>あんまり勧めたくないところだけど
とありますが、お薦めがあれば教えてもらえると嬉しいです。

131 :デフォルトの名無しさん:2006/01/05(木) 17:12:27
>>130
>bash: ./gccx: 許可がありません
chmod u+x gccx
chmod u+x gccxe
chmod u+x gccxf

The UNIX Super Textでも読んで
まず基本的なことを身に着けた方が良いよ


132 :デフォルトの名無しさん:2006/01/05(木) 17:14:45
>>130
gccxなどのファイルパーミッションはちゃんと実行許可を立てていますか?
つーか、鼬害なのでとっとと犬板か海胆板にお帰りください。

133 :デフォルトの名無しさん:2006/01/05(木) 17:41:39
Cです。連番のファイルを処理したいとき、(例えば01.dat 02.dat...)
forループで処理するとしてfopenでファイル名で
どのようにループの変数を設定すればよいのでしょうか?

134 :デフォルトの名無しさん:2006/01/05(木) 17:47:30
sprintf

135 :デフォルトの名無しさん:2006/01/05(木) 18:05:27
>131
>132
解答ありがとうございました。
確かに、
.bashrcに

>exoprt XINCDIR='/usr/X11R6/include/X11'
>export XLIBDIR='/usr/X11R6/lib'
(上のexoprt をexportに書き直しました)
と書き入れ、>131の方法で、許可を与え同様に実行しましたが、

XINCDIR: 定義されていない変数です。
と応答されまたもコンパイル不能でした。
基本操作だそうなので追加の解答は期待せず調べてみますね。

136 :デフォルトの名無しさん:2006/01/05(木) 18:19:54
>>135
typoごめんね

>XINCDIR: 定義されていない変数です。
$ export
とうつと今設定されている環境変数が表示されます
XINCDIRは設定されてる?


137 :デフォルトの名無しさん:2006/01/05(木) 18:22:12
質問させて下さい。

for(i=0 ; i !=1 && i !=2 ; ){
printf("put 1 or 2\n");
scanf("%d", &i);
if(i !=1 && i!=2){
scanf("%d", &i);
}
こうすると、数字を入力したときは
正常に再入力に戻ってくれるのですが
英字(aなど)を入力すると入力メッセージ
が無限ループしてしまいます。
英字を入れたときも正常に再入力
にするにはどうすればいいですか?

138 :デフォルトの名無しさん:2006/01/05(木) 18:23:54
環境はVisual C++です。
よろしくお願いします。

139 :デフォルトの名無しさん:2006/01/05(木) 18:24:13
>>136
あんまり甘やかすなや。

>>137
scanf()を使うのを諦め、fgets()とsscanf()を組み合わせて使う。
実例は、このスレか過去スレ、或いは宿題スレで見つかると思う。

140 :デフォルトの名無しさん:2006/01/05(木) 18:30:54
>>139
ありがとうございましたm(__)m
なんとかなりそうです。

141 :デフォルトの名無しさん:2006/01/05(木) 19:43:29
>>136
返信ありがとうございます。
ちょっと挙動に混乱したため(rootでLogin後、端末で一般<>rootとすると応答が違う、など)
一度LogOutし、root,一般でLoginしてそれぞれexport,./gccx を試しました。

始めにrootでLoginした場合、exportで上記環境変数は設定されず。
(これは.bashrcを設定したホームディレクトリ位置から当り前ですね。この状況での>>135
応答だったようです)
始めに一般でLoginした場合、exportで上記環境変数は設定されていて、./gccxでの応答が
実行させたプログラムにより変わりました。(su root でrootになっても環境変数設定確認)

ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/HIGH/SRC/project.cc
例えばこの放物線運動 のソースの場合、
nxgraph.h: In function ‘void NXRotateWindow(int, int, double)’:
nxgraph.h:1657: error: ‘cos’ was not declared in this scope
nxgraph.h:1658: error: ‘sin’ was not declared in this scope
とエラーが表示されました。
Dirac方程式による水素原子の動経波動関数
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CIP/raddirac.html
の場合、cip.hのヘッダファイルは予め作業フォルダに保存した上で、
In function `NXError(char const*)':
raddirac.cc: warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
/tmp/ccVFDneo.o(.text+0x1934): In function `NXRotateWindow(int, int, double)':
(長いので略)
とエラーが表示されました。
nxgraph.hがきちんと導入されていないような様子ですね。ちなみにnxgraph.hも
ソースファイル、gccxらとともに作業フォルダに保存してあります。

あまりに初歩的な質問でお手数お掛けして申し訳ありません。

142 :デフォルトの名無しさん:2006/01/05(木) 19:51:51
はじめまして。
C++を始めようと思うんですが、C++.netってコンパイルされた後の
コードが機械語じゃなく、半分翻訳された中間体のような物だとと聞きました。
過去のOSなどで使えるソフトが作れるような、機械語コードを吐き出す
C++は現在売られているのでしょうか?
よろしくお願いします。

143 :デフォルトの名無しさん:2006/01/05(木) 19:55:00
もんだいない。ネイティブC++は健在

144 :デフォルトの名無しさん:2006/01/05(木) 19:56:10
>>142
現在の主流の処理系は機械語を生成する。たぶんおまえが言ってるC++.netはmanaged C++のこと。

145 :デフォルトの名無しさん:2006/01/05(木) 19:56:18
売られてる最新のVC++.NET使ってるけど出力されるのは普通の機械語ですが何か?


146 :デフォルトの名無しさん:2006/01/05(木) 19:56:55
windowsxpなんですが、コマンドプロンプトでプログラム*.cを実行しようとすると
'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示されます。
どうしたら実行できるようになるんですか?

147 :デフォルトの名無しさん:2006/01/05(木) 19:57:36
まぁ、VisualC++.NETとかって売られてる本でも、Managedとか断りも無く、普通に.NET Frameworkで書いてあるだろうけどな

148 :デフォルトの名無しさん:2006/01/05(木) 19:57:41
冬休みだなぁ・・

149 :デフォルトの名無しさん:2006/01/05(木) 19:58:15
>>146
まずはPCを窓から投げ捨てろ
話はそれからだ

150 :デフォルトの名無しさん:2006/01/05(木) 19:58:31
>>146
GCCはインストールした?
したなら、環境変数PATHの値にgcc.exeのパスが含まれてる?

151 :デフォルトの名無しさん:2006/01/05(木) 19:59:24
*.cは実行できません。実行できるのは*.exeとか

152 :デフォルトの名無しさん:2006/01/05(木) 20:01:29
>>147
そーか? VC++.NET本ってネイティブが主のが多いんじゃね。
おれの立ち読み感からするとだが


153 :146:2006/01/05(木) 20:02:15
すいません。gccインストールしてません。
いつもは学校でlinuxのターミナルでやってるので家のものは使い勝手が違いよくわかってないんですが、
他のやり方で作ったプログラムが機能してるかどうかテストできる方法ありませんか?

154 :デフォルトの名無しさん:2006/01/05(木) 20:03:18
gcc入れたら?

155 :デフォルトの名無しさん:2006/01/05(木) 20:04:08
>>153
WindowsでGCCを使うにはインストールが必要。
Mingwあたりを調べれ。

156 :デフォルトの名無しさん:2006/01/05(木) 20:04:13
そんなくらい自分で調べろや・・・

157 :デフォルトの名無しさん:2006/01/05(木) 20:04:23
学校いけよ

158 :デフォルトの名無しさん:2006/01/05(木) 20:04:50
大学生・・・だよなぁ?

159 :146:2006/01/05(木) 20:05:11
失礼しました。一通りググってからもう一回来ます。

160 :デフォルトの名無しさん:2006/01/05(木) 20:07:40
>>143>>144>>145>>147
C++.netを買ってプログラミングしてみます。
有難うございました。

161 :デフォルトの名無しさん:2006/01/05(木) 20:09:38
>>134
ありがとうございます。sprintfを調べて作ってみたのですが、
int main(void)
{
FILE *fin, *fout;
char infile[80], outfile[80];

for(z=1;z<=2;z++){
sprintf(infile,"%02d.dat", z);
if ((fin=fopen(infile,"r")) == NULL){
printf("Can't open file!\n");
exit(1);
}
sprintf(outfile,"%02dg.dat", z);
fout=fopen(outfile,"w");

これ以下処理....
}
とやってみたもののopenに失敗してしまいます。
どこがわるいのでしょうか?

162 :デフォルトの名無しさん:2006/01/05(木) 20:11:17
自己解決しました。

163 :デフォルトの名無しさん:2006/01/05(木) 20:11:22
ファイルが無いんじゃないの?

164 :デフォルトの名無しさん:2006/01/05(木) 20:12:25
こんないちいち聞かないと進められないくらいなら、プログラムなんかやめちまえ。

165 :161:2006/01/05(木) 20:26:39
ファイルはちゃんと同じフォルダにあります
もうちょっとしらべてみますね

166 :デフォルトの名無しさん:2006/01/05(木) 20:28:20
自己解決したんじゃないのか?

167 :161 ◆54OuYX6VME :2006/01/05(木) 20:37:45
162は私ではないです
一応とりつけときます

168 :デフォルトの名無しさん:2006/01/06(金) 00:45:32
ちゃんとclose()してる?

169 :デフォルトの名無しさん:2006/01/06(金) 03:09:12
>>161
エラー出力を perror("Can't open file!"); に変えてみよう。

170 :デフォルトの名無しさん:2006/01/06(金) 14:18:23
派生クラスに対して、
派生クラスのインスタンスを被演算数とするオペレータを
定義することを義務付けるような基底クラスというのは
どのように書けばいいのでしょうか…。

template <class T>
class hoge{
public:
  virtual T& operator+=(T&) = 0;
};

こんな感じに書くしかないのでしょうか。

また、この基底クラスの仮想オペレータを呼び出すことで、
継承クラス先のオペレータの処理を抽象化しながら、
何らかの処理をするクラスを作りたいのですが、

template <class T>
class piyo{
public:
  void excute(hoge<T>* phoge){}
};

のように書いても、リンク時に外部シンボルが参照できないという
エラーが出てしまいます。
どう書けば、基底クラスのインターフェイスだけで、
派生クラスごとのオペレータを呼び出せるのでしょうか…。

171 :デフォルトの名無しさん:2006/01/06(金) 15:10:58
LinuxでSIGSEGVやSIGFPEを無視する(あるいはエラー処理をしてプログラムを続行する)にはどうすればよいのでしょうか?
シグナルを無視すると無限ループになるし。。。


172 :デフォルトの名無しさん:2006/01/06(金) 16:04:07
>>171
こっちの方が良いかも
http://pc8.2ch.net/test/read.cgi/tech/1127373405/


173 :171:2006/01/06(金) 16:33:10
>>172
わかりました。そちらで質問しなおします。ありがとうございました。


174 :デフォルトの名無しさん:2006/01/06(金) 20:22:32
>170
何をしたいのかよく解らん。
オペレータって何だ?関数のことか?

175 :デフォルトの名無しさん:2006/01/06(金) 20:38:09
つーか、派生とテンプレートを混乱している悪寒。

176 :161 ◆54OuYX6VME :2006/01/06(金) 21:43:18
変数zをグローバルでdouble型にしていたのが問題だったようです。
皆さんどうもありがとうございました

177 :デフォルトの名無しさん:2006/01/06(金) 22:13:51
>>170
タイプリストを使って間接的にテンプレートを扱ってみては?

/// @file CBase.h

template <class T> struct TypeList
{
 typedef T MyType;
};

template <class MyType> class CBase
{
public:
 CBase(){}
 virtual ~CBase(){}

 virtual MyType& operator += (MyType& rhs) = 0;
};

///


178 :デフォルトの名無しさん:2006/01/07(土) 01:26:28
>>176
「z」がグローバルなのは関係ない。
double なのは大いに関係有りだが。

# %d 指定に double 渡すなボケ!

179 :170:2006/01/07(土) 04:12:26
解決しました。
テンプレートクラスのメソッドは、
独立したcppソースには書いてはいけないんでした…。
何度もはまったことなのに、今回気付くのに10時間以上かかりました…。orz
これがVC++7やBCC5.5に限った話なのかはわかりませんが…。

>>174
基底クラスのなかに、それを継承したら継承先のインスタンス同士の
演算子も絶対に定義させるような仕組みを作りたかったんです。
ポリモフィズムで何とかできるか考えていたのですが、
思い浮かばなかったので、テンプレートを使うことにしました。

>>175
かもしれないです…。
相反する概念であることは理解しているつもりなのですが、
実装するときにはなかなかうまくいきません。。

>>177
ありがとうございます。
そういうテンプレートの使い方があったんですね。勉強になります。

180 :デフォルトの名無しさん:2006/01/07(土) 05:28:37
>>179
いい勉強になったな。ではComeau C++でも(ry

181 :デフォルトの名無しさん:2006/01/07(土) 05:42:47
export 実装処理系キタ━━━━(゚∀゚)━━━━!!

182 :デフォルトの名無しさん:2006/01/08(日) 22:06:21
つか、ギコナビでこのスレみつかんなくなったage

183 :デフォルトの名無しさん:2006/01/08(日) 22:21:48
アホか

184 :デフォルトの名無しさん:2006/01/08(日) 22:25:04
>>183
アホつった奴がアホなんだ。アホ。

185 :デフォルトの名無しさん:2006/01/08(日) 22:33:50
>>184

186 :デフォルトの名無しさん:2006/01/09(月) 01:22:10
今どきC++な僕らがアホなんだ。アホ。

187 :デフォルトの名無しさん:2006/01/09(月) 12:54:07
質問です
C++ってコンストラクタからコンストラクタを呼び出すって出来ますか?

例)
class Foo {
private: int i; char c;
public:
  Foo(int i, char c) { this->i = i; this->c = c; }
  Foo() { Foo(0, '\0'); }
};


188 :デフォルトの名無しさん:2006/01/09(月) 12:55:19
なぜ試さない・・・

189 :デフォルトの名無しさん:2006/01/09(月) 12:57:13
>>187
コンストラクタから呼び出すコンストラクタは、一時オブジェクトになる。
つまり、それに操作を施しても結果が残らない。

190 :デフォルトの名無しさん:2006/01/09(月) 13:15:42
>>188
色々試してダメだったのよ
Foo() : Foo(0, '\0') {} もできなかった

>>189
複数のインターフェイスをもつ、
複雑なコンストラクタを持ちたい場合は、
実処理をprivateかprotectedな別関数に持たした方が良さそうですね。

>>188-189
ありがとうございました。

191 :デフォルトの名無しさん:2006/01/09(月) 13:24:04
例ならデフォルト引数で良さそうにも見えるけど… だめなん?

class Foo { public: Foo(int i=0, char c='\0'); };

192 :デフォルトの名無しさん:2006/01/09(月) 13:47:23
>>191
ありがとうございます。
でも、実際はこんな感じなんです
class Foo {
private: construct_(int a, PFUNC pfunc, char* ini_file);
public:
 Foo(int a=DEF_VAL, PFUNC pfunc=DEF_FUNC, char* ini_file=DEF_INI_FILE) { construct_(a, pfunc, ini_file); }
 Foo(PFUNC pfunc=DEF_FUNC) { construct_(DEF_VAL, pfunc, DEF_INI_FILE); }
 Foo(char* ini_file) { construct_(DEF_VAL, DEF_FUNC, ini_file); }
};
なので、コンストラクタとは別に実コンストラクタを持つ方がいいかなぁと。

193 :デフォルトの名無しさん:2006/01/09(月) 14:09:52
>>192
そういうのだと、分離したほうがすっきりしそうだね。
ついでに実デストラクタ(?) もセットにしておけば、スマートに見える(かも)

194 :デフォルトの名無しさん:2006/01/09(月) 16:08:34
VC6.0でプログラムしてるんですが
プロジェクトフォルダ以外にインクルードファイルだけまとめたフォルダがあるんですが
参照したいインクルードファイルのフォルダの追加ってどこで設定できるんですか?
とりあえずプロジェクトの設定だいあろぐを出して色々みてるんですが
どこにあるかわかりません

195 :デフォルトの名無しさん:2006/01/09(月) 16:14:05
オプション(O)画面も出せない君はスレ違い

196 :デフォルトの名無しさん:2006/01/09(月) 16:19:36
スレ違いでしたようでどうもすいません。
おかげさまで解決しました。ありがとうございます。

197 :デフォルトの名無しさん:2006/01/09(月) 16:40:47
お前ら最高に素敵だ!

198 :デフォルトの名無しさん:2006/01/09(月) 17:01:15
スレ違いかもしれませんがどうしてもわからないので教えて下さい。
今C言語勉強用にコマンドラインでオセロを作成しているのですが、今盤面のすべての所に石がおける状態です。それと挟んだ石をひっくり返す判定がどうしてもわかりません。
どうか教えていただけないでしょうか。
ソースを下記に記載します。(初心者なので突っ込み所満載のソースだと思いますがどうかあまりつっこまないで下さい><)


#include<stdio.h>

///石の種類///
#define no "・" // 0
#define bl "●" // 1
#define wh "○" // 2

///盤面8*8///
int banmen[10][10]; //枠を1マス分多く取っています。


//////////////配列の初期化////////////
void syoki(){
int i, j;
for ( i = 1; i <= 8; i++){
for ( j = 1; j <= 8; j++){
banmen[i][j] = 0;
}
}
banmen[4][4] = banmen[5][5] = 1;
banmen[5][4] = banmen[4][5] = 2;

}//////////////////////////////////////




199 :デフォルトの名無しさん:2006/01/09(月) 17:02:39

///////////石をひっくり返す判定///////////
/*
int hantei (int x, int y){
if ( h, bnmen[h][v] == 0, h++)
*/

/////////////////////盤面の入出力///////////////////////////
void othello(){
int i, j, k, l, h, v;
for ( k = 1; k < 60; k++){ //オセロは最多60手なので60手で終了。
///盤面の表示///
printf (" 1 2 3 4 5 6 7 8\n +----------------+\n");
for ( i = 1; i <= 8; i++){
printf ("%d|",i);
for ( j = 1; j <= 8; j++){
switch ( banmen[i][j]){
case 0:
printf(no);
break;
case 1:
printf(bl);
break;
case 2:
printf(wh);
break;
}
}
printf("|\n");
}
printf (" +----------------+\n");

200 :デフォルトの名無しさん:2006/01/09(月) 17:02:57
>>198
どんなところに石が置けるのか、挟むとはどんなことなのかを日本語で書き出せ。
そしてそれをCで表現するにはどうしたらいいか考えろ。

201 :続き:2006/01/09(月) 17:04:39
///石の入力///

l = k % 2; //白の番か黒の番かの判断。(lの値が0なら白、1なら黒)

printf ("行を指定して下さい(1〜8):");
scanf ("%d",&h);
printf ("列を指定して下さい(1〜8):");
scanf ("%d",&v);

if ( ((h >= 1) && (h <= 8)) && ((v >= 1) && (v <= 8)) ){
switch ( banmen[h][v]){
case 0:
switch (l){
case 0: //白の番
banmen[h][v] = 2;
break;
case 1: //黒の番
banmen[h][v] = 1;
break;
}

break;

202 :続き:2006/01/09(月) 17:07:26
case 1:
printf ("\n\nError : そこには石を置けません。\n\n");
k = k - 1;
break;
case 2:
printf ("\n\nError : そこには石を置けません。\n\n");
k = k - 1;
break;
}

}
else if ( h == 0 && v == 0 ){ // ユーザーが0,0と入力した場合は"k"に"60"を代入してゲームを強制終了
k = 60;
}
else{ //ユーザーが盤面の外を指定した時の処理
printf ("\n\nError : 正しい値を入力して下さい。(1〜8)\n\n");
k = k - 1;
}
}
}////////////////////////////////////////////////////////////////


int main(){
syoki();
othello();
}

203 :198:2006/01/09(月) 17:10:58
>>200さん
ぼくなりに考えたのですが

石を置いた時に、隣を見て自分と反対の色の石があり、なおかつ延長線上に自分の石がある時におけると思いました。
それを8方向調べる。

上記に当てはまらないばあいは置けない。

こんな感じだと思うんですがどうしてもC言語で表現する方法が思い浮かびません><

204 :デフォルトの名無しさん:2006/01/09(月) 17:26:28
だめだな
思いつかないならまだ早いと言うことだ

205 :198:2006/01/09(月) 17:33:29
そんなぁ><
まだ独学ではじめて1ヶ月くらいなんです。。。
先生がいないから教えてほしいのです><

206 :デフォルトの名無しさん:2006/01/09(月) 17:39:09
>石を置いた時に、隣を見て自分と反対の色の石があり、
まずはここから。これができたら、隣りの隣りを見て、隣りの隣りの隣りを見て...まぁがんばれやと。

207 :198:2006/01/09(月) 17:45:50
>>206
がんばってみます><

208 :デフォルトの名無しさん:2006/01/09(月) 17:51:18
一度にあれこれ考えすぎてるんだろうな

209 :デフォルトの名無しさん:2006/01/09(月) 18:00:36
自分が実際にオセロやって裏返すときに考える過程をひとつずつ思い出して
それをそのままコーディングすればいいじゃない

210 :デフォルトの名無しさん:2006/01/09(月) 18:31:18
C言語塾とかやったら成り立つだろうか?

211 :198:2006/01/09(月) 18:32:58
だめだスパゲッティになってきて頭が混乱してきた><
ふぅ少し休憩・・・

212 :デフォルトの名無しさん:2006/01/09(月) 18:38:11
始めまして、VC++を学ぼうと思うのですが
いまいちどれを購入したらいいかわからないです。
とりあえず探してみたものなのですが
Microsoft Visual Studio .NETてのは、C++はいってるんですか?
ちなみに学生なので購入はできそうなのですが・・・・
あと、お勧めとかあったらおしえてください。

213 :デフォルトの名無しさん:2006/01/09(月) 18:40:01
つ アカデミパック

214 :212:2006/01/09(月) 18:47:40
すみません、書き足りない部分が・・・・
Microsoft Visual Studio .NETの説明をみていると
複数の言語が入っているようなとらえ方をしてしまっているのですが
それであっているのでしょうか??
そうなると、C++でも使えなくなる命令語とかでてきるのでしょうか?
初歩の初歩だと思いますがどうか回答お願いします^^;

215 :212:2006/01/09(月) 18:49:38
Microsoft Visual Studio .NETは、C++のアカデミパックってとこですか?

216 :デフォルトの名無しさん:2006/01/09(月) 18:50:42
>>212
学生だからアカデミックパック買えばいいけど
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
まずは、ただだからこれでもつかってみ


217 :デフォルトの名無しさん:2006/01/09(月) 18:56:46
>>212
学生ならVisual Studio.net 2003 theSpokeを購入するのが安上がり。C++入ってる。
今は購入して登録するとVisual Studi.net2005 Proを無償でDL出来るキャンペーンみたいなこともやってる。
スレ違いだけどな

218 :212:2006/01/09(月) 22:05:58
無料DLみたいなのできました^^
いろいろ、ありがとうございました。

219 :デフォルトの名無しさん:2006/01/09(月) 22:36:16
http://www.gnu.org/software/libiconv/の使い方がわかりません
どっかにサンプルコードとかないですかね?
"libiconv サンプルコード"とかで検索しても上手くひっかからなくて…

220 :デフォルトの名無しさん:2006/01/09(月) 23:17:52
>>219
HPのiconv(3)とか
http://docs.hp.com/ja/B2355-90855/iconv.3C.html
オレ様サンプルで良ければこれを・・・
http://dream.my-sv.net/upload/src/up0094.lzh (Kaoriya配布版 iconv.dll用ラッパクラス)

221 :219:2006/01/10(火) 00:13:33
>>220さん
回答ありがとうです
バカちんこたんなおいらでも分かりそうな気配がするので読んでみます
ありがとうございました

222 :デフォルトの名無しさん:2006/01/10(火) 01:26:25
C++ で、数値(int or long) を16進文字列に変換する方法を教えてください。
sprintf を利用するのはなしでお願いします。
16 のx 乗の余りをswitch-case で文字連結していくのはダサイですよね。。。

223 :デフォルトの名無しさん:2006/01/10(火) 01:30:31
>>222
std::ostringstream oss;
int n = 0x12345;

oss << std::hex << n;
std::cout << oss.str() << std::endl;

224 :222:2006/01/10(火) 01:40:33
>>223
あぁーん、そんなやり方があるんですね。
ありがとうございます。

225 :デフォルトの名無しさん:2006/01/10(火) 02:03:32
>>222
Cだけど
unsigned longn = 0x123456;
charbuf[100],*p;
p = buf+100;
*--p=0;

while( n ) {
*--p = "0123456789ABCDEF"[n&0xF];
n>>=4;
}


226 :デフォルトの名無しさん:2006/01/10(火) 03:02:23
Visual Basic なんだけど、
Sub ex2()
Dim x As Integer, s As Integer
s = 0
For x = 1 To 100
s = s + x
Next x
If x Mod 2 Then

End If
MsgBox "合計=" & s
End Sub

ってのに奇数だけの和を求められるようにするにはどう変形すればよいですか?

227 :デフォルトの名無しさん:2006/01/10(火) 03:18:15
>>226
スレ違い

228 :デフォルトの名無しさん:2006/01/10(火) 06:58:46
つーかマルチだ

229 :デフォルトの名無しさん:2006/01/10(火) 10:18:35
はわわー

230 :デフォルトの名無しさん:2006/01/10(火) 12:06:40
ウィンドウズアプリケーションを作っていますが、
他のアプリケーションを起動させる関数が分からなくて困っています。
自分のアプリケーションでヘルプボタンを押したら
ヘルプ用に作成してあるHTMLファイルをIE等で開きたいのです。
検索したもののキーワードが悪いのか、
いくらでも出てきそうなのに出てきません。
よろしくお願い致します。

環境:
WinXP(SP2)
BCC5.5.1

231 :デフォルトの名無しさん:2006/01/10(火) 12:07:19
ShellExecute()
Win32スレに逝った方がいいよ。

232 :230:2006/01/10(火) 12:32:02
>>231
ありがとうございます!

233 :ちょっと教えてください:2006/01/10(火) 12:54:48
eclipseでc/c++をコンパイルして実行したいのですがいまいちうまく
いきません。cdtとcygwinをいれました。で、このサイトを
http://www2.atwiki.jp/ccw/pages/18.html
参考にmakefileをつくりビルドしましたが実行ファイルができません
今はhello01をビルドしてもコンソールに何もメッセージは出ていません。
どうすればc言語をコンパイル実行できますか?

234 :デフォルトの名無しさん:2006/01/10(火) 13:00:26
>>233
まずは、コマンドラインでコンパイルできるか試してみたら?
その手のIDEはコンパイラが適切にインストールされていることが前提なのだし。

235 :ちょっと教えてください:2006/01/10(火) 13:16:43
>>234
コマンドラインからはきちんとコンパイルできてa.exeができて実行できます


236 :デフォルトの名無しさん:2006/01/10(火) 13:49:49
>>235
makeは?
つーか、その辺になるとEclipseスレか。
#あるのか知らんが。

237 :ちょっと教えてください:2006/01/10(火) 14:01:25
make? Makefile 作りました。
こんな内容です
helloworldのプログラムを書きました。でファイル名はhello01.cで
参考サイトにはhello03って書いてあったのでmakefileにはhello03にしています
hello01にしても同じ結果でした。

TAEGET = hello03
CFLAGS = -g
OBJS = hello03.o

all : $(TARGET)
clean :
rm -f $(TARGET).exe $(OBJS)

238 :デフォルトの名無しさん:2006/01/10(火) 14:25:35
こまっています・・・

Win2000SP4で権限チェックするモジュールがあります。
これは、NetUserGetLocalGroups()でログインしているユーザが所属しているローカルグループを
一覧して、「Administrators」グループに所属しているか確認しています。

ある特定の端末(数台)で、一覧されるユーザが「Users」権限のみになってしいます。

正常な端末では、「Users」と「Administrators」グループが取れます・・・

このAPIは端末の設定か何かで動作が変るものでしょうか??

239 :デフォルトの名無しさん:2006/01/10(火) 14:42:42
Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/

240 :デフォルトの名無しさん:2006/01/10(火) 19:56:46
Getメソッドによく
const char* getName() const;
の表記が見られますが、関数getName()の後ろにまで const を付ける意味が知りたいです。
const char* はgetNameの戻り値がconstである事を表しているのだと思いますが
後ろの const の役割がわかりません・・・

241 :デフォルトの名無しさん:2006/01/10(火) 20:00:34
メンバ変数を変更しない

242 :デフォルトの名無しさん:2006/01/10(火) 20:03:35
>>241
なるほど、クラス内のメンバ変数も変更されないという事ですね。どうもです。

243 :デフォルトの名無しさん:2006/01/10(火) 20:13:24
あらゆる代入などの変更処理をしない

244 :デフォルトの名無しさん:2006/01/10(火) 20:27:33
名前: デフォルトの名無しさん
E-mail: sage
内容:
コマンドの引き数として<実数><演算子><実数>の形で与えられた
四則演算を計算し、結果を出力するプログラムを書いたのですが、
引数が2個あたえられた場合にエラーを出力させる所が良くわかりません・・・
下のプログラムに書き足すとしたらどうしたら良いでしょうか?


245 :デフォルトの名無しさん:2006/01/10(火) 20:28:08
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double operand1, operand2, result;
char op;
operand1 = atof(argv[1]);
operand2 = atof(argv[3]);
sscanf(argv[2], "%c", &op);
switch(op){
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '/':
result = operand1 / operand2;
break;
default:
printf("error");
break;
}
printf("%lf\n", result);
return 0;
}


246 :デフォルトの名無しさん:2006/01/10(火) 20:29:27
誤爆スマソ

247 :デフォルトの名無しさん:2006/01/10(火) 22:47:45
>>237
hello03


248 :デフォルトの名無しさん:2006/01/10(火) 22:56:14
そもそもTAEGET

249 :デフォルトの名無しさん:2006/01/11(水) 01:04:59
コンテナの中から、ある条件を満たした要素だけを削除する関数release()を
作成したいのですが、イテレータを使って削除していくと実装手順によっては
メモリ保護違反で強制終了されてしまいます。

以下に、落ちる場合の2パターンと、落ちない1パターンを記載させて頂きます。
なぜ落ちるのか、教えて頂けたら幸いです。お願いします。
なお処理系はwindows2000 + BCC5.5 or VC++7です。
-------------------------------------------------------------------------
// クラス1(#の部分で必ず落ちる)
class HogeSet {
  std::deque<hoge *> hoge_set; // コンテナのインスタンスを集約
public:
  void release(void){
    std::deque<hoge *>::iterator current_it;
    current_it = this->hoge_set.begin(); // 先頭要素のイテレータを取得
    for(; current_it != this->hoge_set.end() ; current_it++){
      if( *current_itがある条件を満たすなら ){ // #
        delete (*current_it); // 要素のメモリ解放
        this->hoge_set.erase(current_it); // コンテナから消去
      }
    }
  }
};
-------------------------------------------------------------------------
これはコンテナから削除済みの要素へのイテレータがインクリメントされてしまうので、
落ちるのは当然なのかもしれません。そこで、次のように書き直してみました。


250 :デフォルトの名無しさん:2006/01/11(水) 01:06:11
// 下のようにrelease()を書き換えても#の部分で落ちます。
  void release(void){
    std::deque<hoge *>::iterator current_it,next_it;
    current_it = this->hoge_set.begin(); // 先頭要素のイテレータを取得
    while( current_it != this->hoge_set.end() ){
      next_it = current_it+1; // 次の要素のイテレータを取得
      if( *current_itがある条件を満たすなら ){ // #
        delete (*current_it); // 要素のメモリ解放
        this->hoge_set.erase(current_it); // コンテナから消去
      }
      current_it = next_it; // 次の要素のイテレータを戻す
    }
  }
-------------------------------------------------------------------------
コードは汚いもののこれなら無難かなと思ったのですが、これでも落ちました。
コンテナに存在する要素の数以上にループが回ってるようです。
-------------------------------------------------------------------------
// こうすると落ちません。
  void release(void){
    std::deque<hoge *>::iterator current_it;
    current_it = this->hoge_set.begin(); // 先頭要素のイテレータを取得
    while( current_it != this->hoge_set.end() ){
      if( *current_itがある条件を満たすなら ){
        delete (*current_it); // 要素のメモリ解放
        current_it = this->hoge_set.erase(current_it); // コンテナから消去。次の要素のイテレータも取得
      }
      else current_it++; // 条件を満たさない場合は普通にインクリメント
    }
  }
-------------------------------------------------------------------------
こう書き換えると落ちることなく正常に処理されます。
処理的には2番目のものと何ら変わっていないように思えるのですが…。

251 :デフォルトの名無しさん:2006/01/11(水) 01:13:43
>>250
erase()したら、イテレータが無効になる。二番目のものは、erase()
が返す、次の要素を指すイテレータを改めて取得しているので落ちない。

252 :デフォルトの名無しさん:2006/01/11(水) 01:21:28
>>251
なるほど。
next_it = current_it+1;
としてても、current_itがerase()されたらnext_itも無効になるんですね。
ありがとうございました。

253 :デフォルトの名無しさん:2006/01/11(水) 01:31:46
コンテナの要素をいじくりまわすときは、
for文は使わずに、algorithm使った方がいいよ。
for文は危険だし、遅い。


254 :デフォルトの名無しさん:2006/01/11(水) 01:35:49
>>253
remove_if()でも使え、って事かな?
この場合は、後ろ側に集められた不要な要素をまとめてerase()する事になるね。

255 :デフォルトの名無しさん:2006/01/11(水) 01:40:35
ん、やっぱりremove_if()はだめだな。「削除した要素」は、「削除されなかった
要素」で上書きされる」ってあるから、上のようなオブジェクトをポインタが指す
例では、メモリリークが起きる。

for_each()を使っても、要素を「詰める」事はできないし、どのアルゴリズムを
使えばすっきりする?

256 :デフォルトの名無しさん:2006/01/11(水) 01:50:13
deque<hoge*>::iterator current_it(hoge_set.begin();
for(;current_it!=hoge_set.end();++current_it)
if(hoge(*current_it)) {delete (*current_it); *current_it = static_cast<hoge*>(0);}
といったん消して、ゼロをセットする。
hoge_set.erase(remove(hoge_set.begin(),hoge_set.end(),static_cast<hoge*>(0)),hoge_set.end());
でもってゼロのやつだけまとめて消すってんでダメか?

257 :デフォルトの名無しさん:2006/01/11(水) 01:54:06
そこでスマートポインタですよ


258 :デフォルトの名無しさん:2006/01/11(水) 02:00:22
この場合はやっぱり普通にfor文で回して、boost::ptr_vectorかboost::scoped_ptr
を使うべきだな。
erase()はEffective STLを見ればわかるように、返り値を次のイテレータとすれば
全く問題ない。

259 :デフォルトの名無しさん:2006/01/11(水) 02:01:30
何でboost::ptr_deque<>ではダメなの?

260 :デフォルトの名無しさん:2006/01/11(水) 02:02:08
それはそうだが、メモリの再配置が起きるんで一括して消すにこしたことはない、
ともEffective STLには書いてあったぞ。

261 :デフォルトの名無しさん:2006/01/11(水) 02:10:06
AccessViolationのような例外?はC++ではcatchできないんでしょうか?

262 :デフォルトの名無しさん:2006/01/11(水) 02:11:18
catch(...) で catch できない?

263 :261:2006/01/11(水) 02:18:10
>>262
できないみたいです。

264 :デフォルトの名無しさん:2006/01/11(水) 02:18:49
作ればいいじゃん。

class access_violation_error : runtime_error
{
access_violation_error(int errnum,msg) : runtime_error(msg) ,m_errnum {}
int m_errnum;
int errno() const { return m_errnum;}
const string what() const { otringstream ost; ost << "errnum : " << m_errnum;
return ost.str();}
};

try{
if(is_Access_Violation_Error(...)) //
throw access_violation_error(GET_Access_Violation_Error_Number(),"hogehoge error");
}catch(access_violation_error_number& err){
cout << err.what() << endl;
}

265 :デフォルトの名無しさん:2006/01/11(水) 02:20:43
>>259
う・・・・そういうのもあったのか。勉強不足ですた。スマソ
>>260
std::remove()が、消すべき要素を後ろ側に集めてくれるのなら
それも使えるが、現実問題、>>256のようにするしかないし。

266 :デフォルトの名無しさん:2006/01/11(水) 02:26:27
うわぁ、boost::ptr_listやboost::ptr_set、boost::mapなどもある。

267 :デフォルトの名無しさん:2006/01/11(水) 03:27:40
>>265
std::partitionが消すべき要素を後ろに集めるよ。


268 :267:2006/01/11(水) 09:52:36
あ、そうだ。忘れてた。
std::partition は安定してないから順番も保持したいなら std::stable_partition
その辺は臨機応変に

269 :デフォルトの名無しさん:2006/01/11(水) 12:40:58
externの使いかたを猫でもわかるように説明してください。

270 :デフォルトの名無しさん:2006/01/11(水) 12:43:56
>>269
にゃぁ、にゃにゃにゃん、にゃ。
ぎゃーにゃ!

271 :デフォルトの名無しさん:2006/01/11(水) 12:48:52
>>269
とにかく付けとけば良い。コンパイラに怒られたら外す

272 :デフォルトの名無しさん:2006/01/11(水) 15:18:49
externって意味が違う使いかたがあるよね


273 :デフォルトの名無しさん:2006/01/11(水) 15:47:28
CとC++ではexternの意味が違う。どちらの事を聞いているのかはっきり言え。

274 :269:2006/01/11(水) 16:00:13
>>273
そうなんですか。
ではCでお願いします。

275 :1 ◆HSRZfxFrgo :2006/01/11(水) 16:17:08
 C言語でGIFのデータをメモリに展開し、
LCDに表示したいと思っております。

そこで、GIFの展開ルーチンのCソースコードを
誰か教えていただけないでしょうか?
紹介しているHPでも結構です。

C++だとできなかったので、Cのソースコードでお願いいたします。
よろしくお願いいたします。

276 :デフォルトの名無しさん:2006/01/11(水) 16:18:17
どこの1だよこのカス
帰れ

277 :デフォルトの名無しさん:2006/01/11(水) 16:18:19
変数宣言ではグローバル変数を意味する。初期化子があると定義になる。関数では無いのと同じ。

278 :aaa ◆HSRZfxFrgo :2006/01/11(水) 16:23:36
>>276
すいません、間違えました。

でも、非常に困っているので、誰かお願いいたします。

279 :デフォルトの名無しさん:2006/01/11(水) 16:24:45
>>278
>C++だとできなかったので
できない訳無いやん。

280 :デフォルトの名無しさん:2006/01/11(水) 16:28:30
>>278
別にお前が困ろうと死のうと俺らには関係ないから消えろ

281 :aaa ◆HSRZfxFrgo :2006/01/11(水) 16:33:43
C++は今の開発環境では使わないので困っております。
Cを使っています。
よろしくお願いいたします。


282 :デフォルトの名無しさん:2006/01/11(水) 16:36:16
C++のソースをCに書き直せばよいだけ。

283 :aaa ◆HSRZfxFrgo :2006/01/11(水) 16:40:46
>>282
回答ありがとうございます。
C++からCに直すのは簡単でしょうか?

284 :デフォルトの名無しさん:2006/01/11(水) 16:44:15
場合による

285 :デフォルトの名無しさん:2006/01/11(水) 16:52:44
>>278
読み込んで表示するだけならソース探すより自前で組んだ方が早いと思うが。
ttp://www.tohoho-web.com/wwwgif.htm

286 :デフォルトの名無しさん:2006/01/11(水) 19:47:13
gifフォーマットって、なんか躓くようなややこしいところあったっけ?
単純な画像形式でしょ。

287 :デフォルトの名無しさん:2006/01/11(水) 19:53:45
ダメだこいつ

288 :デフォルトの名無しさん:2006/01/11(水) 20:26:47
チン子

289 :デフォルトの名無しさん:2006/01/11(水) 22:00:36
>>270
テラワロスw

290 :デフォルトの名無しさん:2006/01/11(水) 23:37:46
windowsにて
ファイルオープンのプログラムを組んだとき、
ファイルはどのフォルダに入れておいたらいいんですか?

291 :デフォルトの名無しさん:2006/01/11(水) 23:42:39
   ‖Y .:::::.:.:.:.:.: : :        ::l、|| | ‖ ‖ |
   ‖/.:::.:.:.:.:.:.:. :. _          i || | ‖ ‖ |
    l '.::''::::::.:.::/Y /    r-、  _ i;. | ‖ ‖ |
    l :: :: .:: :: 7:::ヽ /V::::/   /::t__Y, ‖ __
     ,l: l l  l:/:/`'  7::::く  /:t-i::/ ./ ̄____:::::/
    l .l: l:  l:i/   /::/ヽ' ヽ;:`'/    ̄,-, //
    l: l: l:  l:    l,/   ,i' /:/i;;'`‐- /:/ `
    /.:l: .:l  :i:       /  `' i:    `':i |‖|
    l: : l :.i : : l;:      ii;-:、   l;:  ,-' |‖|
    i;. ;: i: :::::::l:       i、 `‐、 l;: /  |‖|
   ||:`;i i; _ .:l:       i     ,l:-'      |
   ,‐-='γ',:;:;ヽl;         , = "
   r'ヾ:,  `‐ '丿=、   ,. = '"`t,- 、      i'i /
   'i,  `    i;.:.:.:.:` '' '`:.:.:.:.:.,- '‐- y'"`= ,  | |/
    `-,    `-、;;: ; : :;; :; :';..;.:.:/:.:.;.:.:.:.`y-':.:.:.
     =-ヽ,     ,. - `-、;;.:.:.:.:.:.:.:.:. ,-'ヽ,   ,.= '
   ,=' '' "i`=-‐,=':.:.:.:.:.:.:.,i`'"'=‐-‐="   `= '
       `'=-.:.:.:.:.:.:,-='



292 :デフォルトの名無しさん:2006/01/11(水) 23:49:25
質問です。
linuxでスレッドを複数経てたプログラムで
forkしてプログラムの複製を作った場合、スレッドも複製されるのでしょうか?
たとえば、スレッドを2つのプログラムをforkしたら
子プロセスもスレッドが2つ走ってる状態になりますか?

293 :デフォルトの名無しさん:2006/01/12(木) 00:01:16
>>290
そもそもファイルオープンのダイアログでは最初に表示されるフォルダを指定できる。

294 :デフォルトの名無しさん:2006/01/12(木) 04:31:42
C言語のプログラムで質問があります


#include<stdio.h>

char *mp;
FILE *fp;


intmain(void)
{
mp = (char *)malloc(2);
fp = fopen("test.txt", "rb");
fread(mp, 2, 1, fp);//test.txtから
printf("%X",*mp);//一文字読み込んで16進数表示させる
fclose(fp);
return 0;
}

上のプログラムはtest.txtから一バイト読み込んで文字を16進数させるプログラムですが
test.txtの最初の文字が”A”だったとすると”41”と表示されるのですが
全角日本語の”こ”だったりすると必ず”FFFFFF82”となり”FFFFFF”の六文字がくっついてきます
”FFFFFF”を表示させないようにするにはどうしたらいいのか、教えてください。

295 :デフォルトの名無しさん:2006/01/12(木) 04:37:52
unsigned char

296 :デフォルトの名無しさん:2006/01/12(木) 04:42:44
>>295
早速の返事ありがとうございました。
unsigned char *mpにすると解決できました。





297 :デフォルトの名無しさん:2006/01/12(木) 11:19:21
>>291って何の絵?
メメタアと書いてあるように見えるが

298 :デフォルトの名無しさん:2006/01/12(木) 11:26:45
まんまメメタアの絵

299 :デフォルトの名無しさん:2006/01/12(木) 16:33:10
【環境】 WindowsXP SP2 / VC.NET 2003 / C言語
【質問】 画面消去の方法は?

300 :デフォルトの名無しさん:2006/01/12(木) 16:52:41
つ デビッド・カッパーフィールド

301 :デフォルトの名無しさん:2006/01/12(木) 17:03:50
>>299
デスクトップのプロパティ → スクリーン セーバー → 電源 → モニタの電源を切るを一分にしてOK → 一分待つ

302 :デフォルトの名無しさん:2006/01/12(木) 18:31:38
>>292
やってみたら?


303 :デフォルトの名無しさん:2006/01/12(木) 20:35:46
>>301
黒で塗りつぶしたウィンドウを全面に表示する。ついでに、プログラムの切り替えを無効にする。
しかし、それでも他のプログラムから割り込まれる可能性はあるので、画面消去というのは難しい。
もっとも確実な方法は、画面そのものをユーザーの目に触れないところに移動することだけど、
残念ながら、Cではその処理を行うことは出来ない。

304 :デフォルトの名無しさん:2006/01/12(木) 20:39:50
>>299
電源プラグを抜く

305 :デフォルトの名無しさん:2006/01/12(木) 21:09:40
反物質をモニタに接触させれば対消滅するよ。

306 :デフォルトの名無しさん:2006/01/12(木) 21:42:13
>>300
吹いた

307 :デフォルトの名無しさん:2006/01/12(木) 22:17:34
>>299
粗大ごみに出す

308 :デフォルトの名無しさん:2006/01/13(金) 00:06:02
>>299
DirectXで真っ黒なビットマップをフルスクリーン表示だ!

309 :デフォルトの名無しさん:2006/01/13(金) 11:20:17
>>303
> 画面そのものをユーザーの目に触れないところに移動することだけど、

ディスプレイ自体と画面は明確に分けるべきだな。
つまり、CRTディスプレイならブラウン管を、
液晶ディスプレイなら液晶を取り外すのが正しいはずだ。

310 :デフォルトの名無しさん:2006/01/13(金) 11:45:46
>>299
もうちょっと何がしたいのか書いたほうがいいよ(笑)

311 :デフォルトの名無しさん:2006/01/13(金) 12:03:11
いちいちそんな事しなくても、目を瞑ればいいじゃないか!

312 :デフォルトの名無しさん:2006/01/13(金) 12:45:47
>>311
それは見ないだけであって消去することにはならない。

313 :デフォルトの名無しさん:2006/01/13(金) 13:03:35
投げ捨てればいいと思うよ

314 :デフォルトの名無しさん:2006/01/13(金) 13:13:21
結論としては、Cでは「画面を消去」することはできないということですね。

315 :地獄界のC使い:2006/01/13(金) 14:06:57
エスパー募集中の方が自己完結しますた。

316 :デフォルトの名無しさん:2006/01/13(金) 14:33:34
Microsoft Visual Studio.NETの2003を使っています。
新規作成でVisualC++のWindowsフォームアプリケーションを選択し、
プログラムを作成したいと思います。何かいい参考書はないでしょうか?
この間中身をよく確かめずに買ったテキストはMFCしか扱ってませんでした…

317 :デフォルトの名無しさん:2006/01/13(金) 14:49:48
>>316
スレ違い。書籍スレへ。

318 :299:2006/01/13(金) 15:04:14
コマンドラインの文字を全消去です。
猫でもわかるだと、\x1b[2Jで
できるはずなのですができないのです。

319 :デフォルトの名無しさん:2006/01/13(金) 15:55:19
コンソールの文字とちゃうの。


curses使うとか。

320 :デフォルトの名無しさん:2006/01/13(金) 16:04:40
そうです、コンソールでした。
その、cursesとは?

321 :デフォルトの名無しさん:2006/01/13(金) 16:06:13
>>318
system( "cls" );

322 :デフォルトの名無しさん:2006/01/13(金) 16:09:57
318
Win9xならできるがNTでは16ビットプログラムでしかできない。

323 :デフォルトの名無しさん:2006/01/13(金) 16:10:51
>>320
状況がまるで分からん。そもそもそんなことをする必要性は?

手段を検討する以前のスキルだと思われるから、自分で考えた
手段を聞くより、総合的に何をしたいか聞くほうがいいと思う。

324 :デフォルトの名無しさん:2006/01/13(金) 18:37:37
>>321
その方法がありましたか。
あり。

325 :デフォルトの名無しさん:2006/01/14(土) 05:56:19
C++でファイルを読み込む前にサイズを知る方法を教えてください。
環境はWindowsなのでAPI使えば良いのは分かっているのですが出来れば環境非依存で標準の範囲で行いたいのです。
よろしくお願いします。

326 :デフォルトの名無しさん:2006/01/14(土) 05:58:07
無い。

327 :デフォルトの名無しさん:2006/01/14(土) 07:11:18
fseekとftellくみあわせたらサイズ収得できるよ

328 :デフォルトの名無しさん:2006/01/14(土) 07:33:32
>>326
標準に無いってのはC++使う範囲だと必要無いって事ですかね。
あっても良さそうなもんですが……。そう言われれば納得です。
>>327
調べてみましたがSEEK_END指定してftellですね。
参考にさせていただきます。

ありがとうございました。

329 :デフォルトの名無しさん:2006/01/14(土) 08:58:56
>>328
必要ないのじゃなく、標準の想定外。
ファイルサイズの概念がないOSだってあるのだから。

330 :デフォルトの名無しさん:2006/01/14(土) 09:12:53
入力した数値を自分の指定した数字&文字の組み合わせに変換することって出来るんですか?
例えば、入力値『110002』→出力値『1B0C2A』みたいに、
1が2つ続くから1B、0が3つ続くから0C、2が1つだから2Bというようにしたいんですけど。
何かやりかたがわかりません。
色々な本とか見て、進数を他の進数に変換するのとかは見つけられたんですけど、
自分で上みたいに指定して数字を変換ことが出来なくて。

331 :330:2006/01/14(土) 09:18:13
ちなみにソフトのバージョンはVisual Basic6.0です。

332 :デフォルトの名無しさん:2006/01/14(土) 09:23:08
スレ違い。

333 :デフォルトの名無しさん:2006/01/14(土) 09:27:00
>>331
ええぇぇ
ここVisual Basicのスレではないよ。

334 :330:2006/01/14(土) 09:33:12
あぁ〜間違いましたC++6.0です。

335 :330:2006/01/14(土) 09:34:30
何度もすみません、
Visual J++6.0でした。

336 :330:2006/01/14(土) 09:37:24
>>335
誰ですか・・・

337 :デフォルトの名無しさん:2006/01/14(土) 09:40:15
VBスレへの誤爆でした。

>>334-336
お疲れさん。

338 :デフォルトの名無しさん:2006/01/14(土) 09:41:22
ヒント:ランレングス圧縮

339 :デフォルトの名無しさん:2006/01/14(土) 22:40:41
ファイル出力について質問なのですが

ofstream out( "test.bin", ios::binary );
この条件で

for( int i = 0; i < 1000; ++i )
     out.write( (char*)&i, sizeof(int) );
は VC++のエディタで開くと
000000 00 00 00 00 と表示されて
いかにもバイナリっぽいんですが

for( 略 )
     out << i;
となると 123456・・・となって
バイナリっぽくないんですが、もしかしてバイナリデータでは
ないんでしょうか?

といのは

340 :339:2006/01/14(土) 22:45:29
WriteFile( HANDLE ・・・ );
に対して今まで
sprintf( str, "%f\r\n", f );
の str を渡していました、それをVCのエディタで開くと
0.00000
と表示されて
000000 00 00 00
といった具合になってなかったもので
もしや、いままでバイナリデータで保存していなかったのか
と思った次第であります。

341 :デフォルトの名無しさん:2006/01/14(土) 22:54:07
>>339
出力されたファイルサイズ見てみれば?


342 :339:2006/01/14(土) 23:05:28
>>341
100000までの数字を出力してみたところ
out << i の方が out.write() よりサイズが
大きかったということは
out << i は
バイナリの皮をかぶったテキストだったのか・・・!!

343 :デフォルトの名無しさん:2006/01/14(土) 23:22:28
アフォか。てきとうなバイナリエディタ使って自分で確認しろよ。

344 :デフォルトの名無しさん:2006/01/14(土) 23:25:55
>>342
ios::binaryフラグの意味を誤解してる。
それはROWモードで開くか、COOKEDモードで開くかを決めるだけ。
それもWindowsにしか意味がなく、UNIXやLinuxではどちらも同じ。

std::ostream::put()でも使う事だな。

345 :デフォルトの名無しさん:2006/01/14(土) 23:34:36
えーと、
知ったかぶって、理解して無いくせにrawとcookedという用語を使うのは
ちょっとみっともないと思います。

346 :デフォルトの名無しさん:2006/01/14(土) 23:39:21
>>345
ぐぐりもせずに私見を述べて優越感に浸っているバカはこいつですか?

347 :デフォルトの名無しさん:2006/01/14(土) 23:48:30
>>344,346
少なくとも C++ の規格では名前どおりの "binary mode", "text mode" が使われてるのに
ここで"ROW"だの"COOCKED"だのを持ち出しているのはおかしい。
おかしいのに口調が偉そうなのは、確かにみっともない。
用語をスペルミスしといて、偉そうにぐぐれとか言うのも大変みっともない。

348 :デフォルトの名無しさん:2006/01/14(土) 23:51:42
>>347
スペルミスではなく、OS側から見た視点だけの事。
そういう些細な事で揚げ足を取りたがるのは、自信がない証拠。

349 :デフォルトの名無しさん:2006/01/14(土) 23:52:47
ミスを認めないのは厨房の証拠。

350 :デフォルトの名無しさん:2006/01/14(土) 23:54:43
どうしてもミスという事にしたいのが貴方の要望なのですね。
残念ながらその手には乗りませんのであしからず。

351 :デフォルトの名無しさん:2006/01/14(土) 23:56:11
ミスというか、無知だな。

352 :デフォルトの名無しさん:2006/01/14(土) 23:56:25
OS側から見ると raw が row になるのか。テラオソロシス

353 :デフォルトの名無しさん:2006/01/14(土) 23:56:30
いや、デバイスのraw,cookedと
ライブラリが'\n'をCR+LFに変換するという動作とは
全く何の関係も無いよ。

知ったかぶってる人がいるみたいだけど。

354 :デフォルトの名無しさん:2006/01/15(日) 00:50:39
>ここで"ROW"だの"COOCKED"だのを持ち出しているのはおかしい。

coocked?

355 :デフォルトの名無しさん:2006/01/15(日) 00:55:12
cock-a-doole-do

356 :339:2006/01/15(日) 00:56:08
風呂にいっとる間に凄い事になっとりますな
rawとcookedなんぞ初めて聞きました
ググッてみると・・・わからん
奥が深い・・・!

で、 out << i を in.readで読み込むと
読めない!(85892741・・・こんな感じ)
で、独習C++によると

"<<演算子で操作するファイルは、書式設定された
テキストを含むファイルなので"

どう見ても
バイナリの皮をかぶったテキストファイルです
本当に有難うございました。

数々のレスどうもでした。

357 :デフォルトの名無しさん:2006/01/15(日) 01:08:18
>>356
だから、被るも何も、改行コードが違うだけだってばさ。

358 :デフォルトの名無しさん:2006/01/15(日) 07:22:15
何度みても>>347の「少なくとも」が笑える
意気揚々と出てきて1ターンで逃げるなよw

359 :デフォルトの名無しさん:2006/01/15(日) 07:38:58
(・∀・)ニヤニヤ

360 :デフォルトの名無しさん:2006/01/15(日) 12:20:45
>>358 まだいたのか。

361 :デフォルトの名無しさん:2006/01/15(日) 12:27:40
まんこ

362 :デフォルトの名無しさん:2006/01/15(日) 15:15:35
特定のクラスからしかインスタンスが作れないクラスを作るには
どうやったらいいのでしょうか。
できればコンストラクタも第三者(クラス)から見えないようにしたいのですが。

363 :デフォルトの名無しさん:2006/01/15(日) 15:20:26
interface

364 :デフォルトの名無しさん:2006/01/15(日) 15:26:59
コンストラクタをprivateにしたクラスを作って
「特定のクラス」をフレンドクラスにしてやるってのじゃだめ?

365 :デフォルトの名無しさん:2006/01/15(日) 15:57:38
純粋仮想クラス

366 :デフォルトの名無しさん:2006/01/15(日) 16:08:30
インナークラスにするとか。
わかりにくくなるけどな。


367 :362:2006/01/15(日) 23:50:54
class A{
protected:
A(){}
public:
virtual void f() = 0;
};

class B{
private:
class C : public A{
public:
C(){/*具体的な処理*/}
f(){/*具体的な処理*/}
public:
A* createA(){return new C(10);}
};

int main()
{
B b;
A *a = b.createA();
a->f();
A *c = new B::C(); //<-エラー
}
こんな感じですか?

368 :362:2006/01/15(日) 23:53:15
A* createA(){return new C(10);}
の10は不要です。

369 :デフォルトの名無しさん:2006/01/16(月) 02:04:58
gccでテンプレート展開後のC++コードを出力させる方法はないでしょうか?

370 :デフォルトの名無しさん:2006/01/16(月) 08:19:05
>>369
とりあえず、無い。
念のため言っておくが、 template はプリプロセッサじゃないから、
「展開」なんて処理は行われていない可能性が高い。

371 :デフォルトの名無しさん:2006/01/16(月) 08:33:41
>>369
インラインテンプレート関数は最適化で痕跡さえ消えるし、アセンブリ出力を読むしか。

372 :デフォルトの名無しさん:2006/01/16(月) 16:04:30
templateってC++言語のソースに埋め込むスクリプト言語みたいだよね。
HTMLに埋め込むPHPみたいな感じ。

373 :デフォルトの名無しさん:2006/01/16(月) 16:19:16
全然チゲー

374 :デフォルトの名無しさん:2006/01/16(月) 18:33:36
>>373
メタプログラミングの視点でみると
>>372の言うことはある意味間違いではないかと。

実際boost::mplのように
templateをひとつのプログラミング言語として見るライブラリも存在しますし。

とは言ってもスクリプト言語としては可読性最悪ですけどw

375 :デフォルトの名無しさん:2006/01/22(日) 14:48:02
あるソースに、

#ifdef _DEBUG
  #define HOGE  hoge
#else
  #define HOGE  NULL
#endif
  ・・・
HOGE();

というような関数呼び出しの記述があって、
_DEBUGマクロが定義されていないときは
NULL()ということになってしまいます。
自分の環境(WinXP + Visual C++ 6.0)で試したところ、
コンパイルしてもNULL()の部分はオブジェクトファイルには
含まれていないようなので問題ないのですが、
これは環境依存でしょうか?それともC言語、C++ともに
仕様で認められている記述なのでしょうか?


376 :B言語:2006/01/22(日) 14:51:44
C言語で作ったプログラムってふつうのプログラムみたいにダブルクリックしただけで使えるんですか?それともコンパイラしなきゃだめですか?

377 :デフォルトの名無しさん:2006/01/22(日) 14:55:29





  ∩_∩
 ( ・(ェ)・) あ、お構いなく
 ( ∪ ∪
 と__)__)








378 :デフォルトの名無しさん:2006/01/22(日) 14:59:10
>>375
ちょっと考えただけだと NULL(); という文はコンパイルできないはず。

379 :デフォルトの名無しさん:2006/01/22(日) 15:00:23
>>376
いろいろ誤解しているようだがとりあえず、
C言語で書いたプログラムはコンパイルしないと実行ファイルにならない。

380 :デフォルトの名無しさん:2006/01/22(日) 15:02:46
>>376
普通のプログラムの大半はC言語で書かれています

381 :B言語:2006/01/22(日) 15:04:58
でもコンパイルしてできたexeファイルを実行しても何も起きないんだけど…

382 :375:2006/01/22(日) 15:12:20
>>378
自分の環境だと
C言語としてコンパイルすると
「関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。」
というエラーが発生しますが、
C++としてコンパイルすると問題ない
>>375のような結果になる)ようです。
気持ち悪いので自分では使わないようにします。

383 :デフォルトの名無しさん:2006/01/22(日) 15:14:39
>>381
どうせ、一瞬で終わっただけだろ。
GUIプログラムならダイアログでも出せばいいし、そうでないならコマンドインタプリタから実行すればいい。

384 :デフォルトの名無しさん:2006/01/22(日) 15:20:08
>>381
それで何か答えてもらえるとでも思うのか?
ここに居る奴らはエスパーじゃないぞ。
具体的な答えが欲しいなら、具体的な情報をまとめてよこせ。

385 :デフォルトの名無しさん:2006/01/22(日) 15:21:36
>>381
動体視力鍛えろ

386 :B言語:2006/01/22(日) 15:24:27
1つのプログラムをコンパイルしたら .C .EXE .obj .tds
とかいう4つのファイルが出てきてそのうちのexeをクリックしても
何も起きずに一瞬で消える現象について解明したいってわけ

387 :デフォルトの名無しさん:2006/01/22(日) 15:28:55
まずは質問の仕方についてお勉強して来い
そして答えは>383

388 :デフォルトの名無しさん:2006/01/22(日) 15:32:08
>>386
「消える」ってことは何か見えてるんだろ?
「何も起きない」とは全然違うじゃねーか。

389 :B言語:2006/01/22(日) 15:33:27
失せろクソオタク
どーせお前らはパソコンがなけりゃただの安月給の貧乏人だよ負け犬ども

390 :デフォルトの名無しさん:2006/01/22(日) 15:39:36
パソコンがある現代では高月給の大富豪で勝ち組です。

391 :デフォルトの名無しさん:2006/01/22(日) 15:40:35
>>386
mainのreturn直前にsystem("pause");でも入れ溶けクズ

392 :デフォルトの名無しさん:2006/01/22(日) 15:41:03
わはは、なんだこいつ。キレるのはえーな。おまえが失せろよ。

393 :B言語:2006/01/22(日) 15:41:32
#include <stdio.h>
int main (void)
{
printf("おはよう\n");
return 0;
}

394 :B言語:2006/01/22(日) 15:42:34
大富豪さん、大貧民のルールはわかりますか?


だったらeME−RU 

395 :B言語:2006/01/22(日) 15:47:50
すいませんすいません
まだ中2なんですぐカッかしちゃううんですよー
ぎゃははーーー
うひゃひゃ
いひゃひゃフォー


396 :B言語:2006/01/22(日) 15:50:06
>>391さんありがとー!!

C言語は一瞬で消えるから今日ヨーカドーで2500円のVsual Basic パーフェクトマスター
買っちゃったー
ぐはわわわわわピー

397 :デフォルトの名無しさん:2006/01/22(日) 15:53:36
芸が細かいな。ちゃんと目欄も0に統一してある。
で、中身は何人いるんだい?
便乗荒らしはよくないぞ。
まさか一人って事は無いんだろう?


まさかなぁ、はははは、は、は、、、、はぁ。

398 :デフォルトの名無しさん:2006/01/22(日) 15:58:28
2500円「仕方ないなあ」
Vsual Basic「だってえ」
2500円「どお?これが2500円よ」
Vsual Basic「ウィンドウが!ウィンドウが!」
一瞬で消えるから「パケット消失」
2500円「まいどあり」
Vsual Basic「Vista・・・」

399 :デフォルトの名無しさん:2006/01/22(日) 16:05:24
>>382
つまり、_DEBUG定義時にHOGE関数が必要で、それ以外の時にはそもそも必要無いのだろ?
だったらそんな不確実な書き方せんと、
HOGE()の所を↓にしとけよ

#ifdef _DEBUG
  hoge();
#endif


400 :B言語:2006/01/22(日) 16:05:26
しかも買ってから気付いた事

Visual Basic でプログラミングするには金がかかる

ギャーハハハハ

401 :B言語:2006/01/22(日) 16:06:27
そーゆーことはちゃんと前書きにかいときなさぁぁぁぁぁい!

402 :B言語:2006/01/22(日) 16:07:11
こっちは数少ないこづかいでヤリクリしとんじゃいボケッ!””

403 :デフォルトの名無しさん:2006/01/22(日) 16:09:24
むしろこずかいが無い方がおまえさんのタメになるかと。
ここに書くヒマがあったらネット検索で勉強しなさいナ。

404 :B言語:2006/01/22(日) 16:12:47
おーいらーのーあーーたまーはーつーるっぱげー

がってんだ!

ボリショイサーカス

405 :%cofigurationOpeICO@:2006/01/22(日) 16:13:04
0100:0101:0001:0110:1001:0101:0101:0000:0100:1010:1010:01011:1101:01010:1011:0101:0101:0101:0100:1111:1000:1011:0001:0100:0001


406 :%cofigurationOpeICO@:2006/01/22(日) 16:15:26
ていのうだなのまおどえらばかだろねあいにえしてんだぼけさわんあjふぃ!母は母八は母はhhッははhhっはっははははははははっははははhっははっははhhh

407 :デフォルトの名無しさん:2006/01/22(日) 16:21:51
4人ぐらい?

408 :デフォルトの名無しさん:2006/01/22(日) 16:53:25
5人じゃね?

409 :デフォルトの名無しさん:2006/01/22(日) 16:55:55
6人だお

410 :デフォルトの名無しさん:2006/01/22(日) 16:56:12
>399
それだと何カ所もある場合めんどくさいじゃん。
#ifdef _DEBUG
 #define HOGE() hoge()
#else
 #define HOGE()
#endif

411 :しろうと:2006/01/22(日) 17:25:22
Visual Studio C++でご質問があります。
クラスを使用して、戻り値の配列を返したいのですが
どうすればよいでしょうか?
ご指導お願いいたします。

#include "stdafx.h"
#include "iostream"
#include "string"

using namespace std;

class TEST{
public:
string test[10](string work[10])
{
return(work);
}
};

main(){
TEST T;
string a[10]={"1","2","3"};
for(int i=0;i<3;i++){
cout << a[i] << endl;
cout << T.test[i](a) << endl;
}
}

412 :>411:2006/01/22(日) 17:26:52
すみません訂正します。
クラスを使用して、戻り値の配列を返したいのですが
ー>
クラスを使用して、戻り値に配列を返したいのですが

413 :B言語:2006/01/22(日) 17:27:17
てめえらひまだなオタッキー

414 :デフォルトの名無しさん:2006/01/22(日) 17:31:52
乗り遅れカコワルイ

415 :デフォルトの名無しさん:2006/01/22(日) 17:33:13
>>411
配列は戻り値にも引き数としても直接受け渡し出来ない

416 :デフォルトの名無しさん:2006/01/22(日) 17:33:27
初心者でもお気楽にWin32APIを呼び出せるように
ライブラリ化したコードとか提供されていないのデツカ?


417 :デフォルトの名無しさん:2006/01/22(日) 17:39:40
(°Д°)ハァ?

418 :デフォルトの名無しさん:2006/01/22(日) 17:42:50
>>416
つ[MFC]

419 :デフォルトの名無しさん:2006/01/22(日) 17:51:04
>>411
配列は戻り値にできない。そこでどうするかというと、
単純な方法ではnew []して動的メモリを返したり、
戻り値の代わりにポインタとその要素数を引数にしたり、
或いは要素数が固定なら配列の参照を引数にしたり。

しかしstd::vectorとかboost::arrayのような配列の代わりにクラス(・構造体)を返す方法がよりよいと思う。

420 :デフォルトの名無しさん:2006/01/22(日) 17:52:27
>>418
ますますお気楽とは正反対の方向だと思うけど。

>>416
Win32API自身もライブラリだよ、お気楽かどうかはともかく。

421 :デフォルトの名無しさん:2006/01/22(日) 18:07:43
ゴキゲン

422 :デフォルトの名無しさん:2006/01/22(日) 18:11:43
ナナメ

423 :デフォルトの名無しさん:2006/01/22(日) 18:13:45
パンパンパーン  ∴
  _, ,_  ∩  , ・,‘
 ( ゚Д゚)彡☆
   ⊂彡☆))Д´)
   .∴∴☆
  . ∴

424 :しろうと:2006/01/22(日) 18:18:26
ご返事ありがとうございます。
どうも感嘆にはできないのかー。
逃げ道はあるようですがなんか難しそうですね。


425 :しろうと:2006/01/22(日) 19:53:23
VisualStudioC++を使用しています。

string s[100]={"a","b"};
配列の要素数を求める関数教えてください。



426 :デフォルトの名無しさん:2006/01/22(日) 19:56:07
>>425
sizeof(s) / sizeof(s[0])

427 :デフォルトの名無しさん:2006/01/22(日) 20:03:27
「関数」だそうだぞ。

428 :デフォルトの名無しさん:2006/01/22(日) 20:06:25
template <typename T, std::size_t N>
inline std::size_t lengthof(const T (&)[N])
{ return N; }

lengthof(s);

429 :デフォルトの名無しさん:2006/01/22(日) 20:08:41
>>425
template <typename T>
inline int sizeofarray(const T& a) {
    return sizeof(a) / sizeof(a[0]);
}

430 :デフォルトの名無しさん:2006/01/22(日) 20:28:20
(゚Д゚)ハァ?

431 :デフォルトの名無しさん:2006/01/22(日) 21:06:02
列挙型の設定ファイルに書き出し/読み込みをしたいのですが、コンパイラの警告無視の強引なキャストまたはswitchによる物量作戦以外のスマートな解決方法はないでしょうか?

432 :デフォルトの名無しさん:2006/01/22(日) 21:14:25
>>431
>列挙型の設定ファイルに

「列挙型を」って言いたいのか?
別に値のまま書き出せばいいじゃん
それとも設定は人が書くようなもんなの?

433 :デフォルトの名無しさん:2006/01/22(日) 21:26:37
>>431
reinterpret_castを使うのなら強引だと言えるが、
列挙型から整数型へは昇格があるし、逆もstatic_castで十分だし、強引なことは何も必要ないと思うのだが。

434 :431:2006/01/22(日) 21:46:37
うへ、暗黙のキャストでやってたorz

435 :デフォルトの名無しさん:2006/01/22(日) 22:18:17
これからC言語を始めようと思っているのですが、
いい参考書ありますか??
文字ばっかり羅列しているより例題みたいなとかが
載ってるのがいいのですが......


436 :デフォルトの名無しさん:2006/01/22(日) 22:23:39
>>435
入門書のほとんどは章毎とかで演習問題が付いていると思うよ?
あとはこっちで。
推薦図書/必読書のためのスレッド PART28
http://pc8.2ch.net/test/read.cgi/tech/1133629787/

437 :デフォルトの名無しさん:2006/01/22(日) 22:42:02
>>436
ありがとうございます。

438 :デフォルトの名無しさん:2006/01/23(月) 07:52:26
>>431
列挙体型のサイズは処理系依存なんで、
キャスト後のサイズと違うことがあって問題になる可能性がある。
例えば、含まれる値が SHRT_MAX 以下なら
short int のサイズになる処理系があってもいいわけだが、
そういう場合、int が 32 ビットなら、
int と仮定して処理しようとするとおかしくなる。
DirectX 関係の列挙体に一見余計な 0xFFFFFFFF という値が入ってるのは、
そういう処理系でも列挙体のサイズが 32 ビットになるようにするため。

一番いいのは、void* を引数に取って、サイズを指定して読み書きする関数を使うこと。
これならキャスト絡みの問題も列挙体まわりの問題も回避できる。

439 :デフォルトの名無しさん:2006/01/23(月) 07:56:59
すみませんスレ違いかもしれませんがどこが適切か分からないので
質問させてください。

lame_enc.dllについてお聞きしたいのですが、
lame_enc.dllは色々ダウンロードできるサイトがいくつもありますけど、

例えば
http://www.mp3-tech.org/encoders_win.html
http://www.rarewares.org/mp3.html
もしくはWinamp5以降のFULLバージョンでインストールした場合のプラグインフォルダ内とか…

すべて名称はlame_enc.dllなのですがファイルの大きさがそれぞれ違います。
lame_enc.dllによって性能の違いとかはあるのでしょうか?

私の場合ネットラジオでの音声配信でMP3エンコードするためにlame_enc.dllを使用していますが
音質改善のためにもし、lame_enc.dllに性能の違いがあればより良いものを選びたいと思っています。

スレ違いかもしれませんが、どなたか分かる方いらっしゃいましたらよろしくお願いします。
尚、いくつか違うlame_enc.dllを試してみたのですが、配信される音質が微妙に違うような気もしました。

440 :デフォルトの名無しさん:2006/01/23(月) 08:00:41
スレ違い

441 :デフォルトの名無しさん:2006/01/23(月) 08:01:12
>>440
じゃぁどこがいいですかね?
教えていただけると助かります。

442 :デフォルトの名無しさん:2006/01/23(月) 08:03:21
自分で探せよバカ

443 :デフォルトの名無しさん:2006/01/23(月) 08:04:13
>>442
どうせ知らないんだろw
知ったかぶり乙

444 :デフォルトの名無しさん:2006/01/23(月) 08:04:14
つーか鼬害。

445 :デフォルトの名無しさん:2006/01/23(月) 08:06:36
なんでこんなバカがム板に来たんだろね・・・

446 :デフォルトの名無しさん:2006/01/23(月) 08:17:46
>>445
バカじゃ無い奴は、大抵の問題を自分で解決できるから。

447 :デフォルトの名無しさん:2006/01/23(月) 08:30:39
自演乙w

448 :デフォルトの名無しさん:2006/01/23(月) 10:33:07
>>439
耳に頼るんじゃなく、差分取って確認しる。

449 :デフォルトの名無しさん:2006/01/24(火) 13:42:02
C++について質問です。
基底クラスB(メンバ関数はvirtualで宣言)を継承したクラスAのポインタを
Bにキャストして、そのメンバ関数を扱うのは安全なのでしょうか?

450 :デフォルトの名無しさん:2006/01/24(火) 13:43:21
B“のポインタ”にキャストするならば安全。
というか、それこそが多態性というものでは。

451 :デフォルトの名無しさん:2006/01/24(火) 14:53:50
>>450
ありがとうございます。
これで心置きなく使えます。

452 :デフォルトの名無しさん:2006/01/24(火) 16:26:27
別にキャストしてもしなくても同じじゃないの?

453 :デフォルトの名無しさん:2006/01/24(火) 16:39:31
>>452
同じじゃあない。

#include <iostream>
using namespace std;

class super{
public:
void foo(){ cout << "super" << endl; }
};

class sub : public super{
public:
void foo(){ cout << "sub" << endl; }
void bar(){ cout << "hogehoge" << endl; }
};

int main(){
sub* pSub = new sub();
super* pSuper = pSub;

pSuper->foo(); // "super"
((sub*)pSuper)->foo(); // "sub"
pSub->foo(); // "sub"
pSub->bar(); // "hogehoge"
//pSuper->bar(); // error

return 0;
}



454 :デフォルトの名無しさん:2006/01/24(火) 16:54:20
>>453
>>>449
>メンバ関数はvirtualで宣言

455 :453:2006/01/25(水) 00:27:29
>454
ごめんなさい。

456 :デフォルトの名無しさん:2006/01/26(木) 19:43:10
C言語を使ったCGIで自分の掲示板を作ってみたいので、
作り方のヒントになるような書籍やサイトがあったら教えてください。
基本的なHTMLの知識や、ファイル操作のやり方は分かるのですが、
win98環境でオフラインテストをする方法から分からないので、
よろしくお願いします。

457 :デフォルトの名無しさん:2006/01/26(木) 20:59:19
>>456
まずは「CGIとは何か?」から調べた方がよさそうだな。

458 :デフォルトの名無しさん:2006/01/26(木) 22:56:14
>>456
オフラインでテストならフリーのサーバーソフトが必要

459 :456:2006/01/26(木) 23:16:35
>>457
CGIはサーバ上で動作するプログラムというように解釈しています。
掲示板をつくりには、HTMLで記載したフォームからプログラムへ、
データを送信して、処理を行わせ、実行結果を返すことが必要かと…
違っていたらゴメンナサイ。教えていただけると、助かります。

>>458
アパッチなどのことでしょうか?
サイトの説明を見たのですがよく分からなかったので、
その辺りを分かりやすく解説してある書籍かサイトを、
紹介していただけると、助かります。
よろしくお願いします。

460 :デフォルトの名無しさん:2006/01/26(木) 23:21:03
教えてクン乙

461 :459:2006/01/26(木) 23:30:07
ゴメンナサイ。別のソフト、AN HTTPDの方で調べていったら、
何とか分かりそうなサイトが見つかりました。
こちらで勉強してみます。失礼しました。

462 :デフォルトの名無しさん:2006/01/26(木) 23:40:24
CreateGame〜陸海空オンライン〜開発始動!
有志によるMMOというジャンルのゲーム製作です。

参加資格:力ある者

463 :デフォルトの名無しさん:2006/01/27(金) 00:03:47
>>462
プロデューサーが最悪と言うことはよく解った

464 :デフォルトの名無しさん:2006/01/27(金) 00:06:52
整数 n (>0) をキーボードより読み込み、それを以下の様に
因数分解するプログラムを作れ。
54=2.3.3.3.
306=2.3.3.17.

#include <stdio.h>
main(){
long d,n;
printf("n=?"); scanf("%ld",&n);
d=2; /* 以下d でnを順に割って行く*/
while(1){
if (n==1) 【 A 】
if (n%d==0) { printf("%ld.",d); n=【 B 】;}
else d=【 C 】;
}
printf("\n");
}


これがわかりません、教えてください

465 :デフォルトの名無しさん:2006/01/27(金) 00:09:09
宿題は宿題スレいけ

466 :デフォルトの名無しさん:2006/01/27(金) 00:09:51
失礼した

467 :デフォルトの名無しさん:2006/01/27(金) 00:20:17
質問です。
ガベコレが便利とかいう話はそりゃ組むだけの奴の勝手な理論であって、
メモリの確保/解放が明示的にできてないプログラムって可読性悪いよなってことでFAでいいでしょうか?

468 :デフォルトの名無しさん:2006/01/27(金) 00:23:30
ふぁ?

469 :デフォルトの名無しさん:2006/01/27(金) 00:26:26
ほぇ?

470 :デフォルトの名無しさん:2006/01/27(金) 00:29:40
用途による

471 :デフォルトの名無しさん:2006/01/27(金) 00:33:04
可読性は関係ないんじゃないか?
明示的な確保/解放を追いたいときは別だろうが、
そんなときにガベコレ使うバカは50%くらいしかおらんだろうし。

472 :デフォルトの名無しさん:2006/01/27(金) 00:44:22
問題は用途だな。
ガベコレに頼ろうとする奴は確保と解放を同じクラス内で
完結させようとはしないだろうからな。
あっちのクラスで用意したインスタンスを
こっちのクラスで解放するなんてこと普通にやってた環境なら
ガベコレなんぞ使ったら可読性は悪いな。

473 :デフォルトの名無しさん:2006/01/27(金) 09:54:27
>>461
CGIのプログラミングの前に、
HTTPのプロトコルの仕組みや、CGIの動作概要を覚えておくべき。
それが分かれば、>>456の様な質問は出なかったはず。

勉強の順番を間違っちゃいかんよ?

474 :デフォルトの名無しさん:2006/01/27(金) 10:02:55
#include <iostream>
int main() {
 std::cout << "Content-Type: text/html" << "\r\n\r\n";
 std::cout << "<html><title>Test of CGI</title><body><p>test.</html>"
}



475 :デフォルトの名無しさん:2006/01/27(金) 18:24:36
>>474
それぐらいはダレでも書けるだろう
設置でつまづく前に>>473だろうな


476 :デフォルトの名無しさん:2006/01/27(金) 22:49:55
その前に、「Cじゃないやん!」ってつっこんであげようよ

477 :デフォルトの名無しさん:2006/01/28(土) 08:36:17
そこをあえて黙っておくのがオトナの対応

478 :デフォルトの名無しさん:2006/01/29(日) 03:52:12
LANでTCP/IP(つーかソケット)を使った簡単なファイル転送プログラムを作ってみたいのですが、
ソケット通信周りの手頃なサンプルはないもんでしょうかね。
ファイル転送と言ってもファイル名やらタイムスタンプやらは後でどうとでもなるので、
単に中身だけが転送されればいいのだけれど。

探してみても、簡単すぎて固定長のKB以内のデータしか転送してなかったり、
逆にftpばりに高機能だったりで……
#Solaris/Linux/Cygwin(OrPSDK)で動かしたいというのもサンプル見つける障碍だったり。


479 :デフォルトの名無しさん:2006/01/29(日) 10:37:35
>>478
十分なサンプルだと思うけど?
何が不足していると思うわけ?
マルチプラットホームの部分?

480 :デフォルトの名無しさん:2006/01/29(日) 13:34:00
[開始文字] (データの情報)データ [終了文字]
を相手に送りつければ良いんじゃねえの?

481 :478:2006/01/29(日) 17:49:19
>>480
終端文字まで受信することにすると、終端文字を含むファイルを送れない可能性が出てきてしまうので巧くないと思われ。
予めデータサイズを送れば(先頭に付加するなどして)よさそうだけど、サイズ分(例えば8バイト?)がパケット分割される可能性は?
また、途中でデータの流れが滞ったらタイムアウト処理しなければいけない?
など考えなきゃいけないことが多そうで、その辺りを反映したロジックが転がっていないかなぁと。
>>479
確かに、SolarisとLinux(orCygwin)とWinAPI(Winsock)の微妙な違いもよく判らない。
Linux用のサンプルがSolarisやWinsockだとそのままでは動かなかったりね。

482 :デフォルトの名無しさん:2006/01/29(日) 21:07:55
単にネットワークプログラミングの知識が不足してるだけと思うんだが
ECHOサーバ以外になんか作ったか?

483 :デフォルトの名無しさん:2006/01/29(日) 21:30:39
>>478
構造体使えばいいんじゃね?同期方式なんて面倒くさい
タイムアウトはソケットに着信があったかどうか見ればいい
残りの細かいことは適当なRFC読め

あとこれ
ttp://pc8.2ch.net/test/read.cgi/tech/1136005644/-6

484 :デフォルトの名無しさん:2006/01/29(日) 23:25:00
>>481
制御用とデータ用の2セッション持ってば?
それか、TFTPの規格でも参考にしたらどうよ?

485 :478:2006/01/30(月) 01:02:51
>>482
あはは、ばればれっすな。
ECHOサーバ以外には簡単な送受信プログラムをメンテナンスしたことくらいしかありません。

>>484
TFTPですか。調べてみます。
……なんだ、やりたいことはほぼこれですね。サーバはSolarisかLinuxだからtftpdを使えば
tftpクライアントを実装するだけな気が……

486 :デフォルトの名無しさん:2006/01/30(月) 10:03:20
>>485
既製でいいなら、TFTPクライアントをインストールすればいいジャマイカ

487 :デフォルトの名無しさん:2006/01/31(火) 09:14:57
VSC++2005EE落としてこれからC言語覚えようと思い、
なにか本でも買おうかと思うのですが、
CができないとC++覚えるのはきついでしょうか。
あとWin32APIについても別に本を買って覚えた方がいいんでしょうか。

488 :デフォルトの名無しさん:2006/01/31(火) 09:21:07
>>487
とりあえず本読め
後のことはそれから考える。

489 :デフォルトの名無しさん:2006/01/31(火) 09:27:13
Express Editionか、Enterprize Editionかと一瞬思ってびびった

490 :デフォルトの名無しさん:2006/01/31(火) 09:28:00
もとい、Enterprise

491 :デフォルトの名無しさん:2006/01/31(火) 21:51:18
>>487
C++からいきなり覚えてもよいと俺は言いたいのだが、
世の中の大半のC++の入門書はCができることを前提にしているから仕方がない。

492 :デフォルトの名無しさん:2006/01/31(火) 22:06:15
そこでAccelarated C++ですよ。

493 :492:2006/01/31(火) 22:06:55
訂正。Accelerated C++

494 :デフォルトの名無しさん:2006/02/01(水) 04:30:07
Cに対応した正規表現パッケージはありませんか?

495 :デフォルトの名無しさん:2006/02/01(水) 04:31:19
>>494 ありますよ。

496 :デフォルトの名無しさん:2006/02/01(水) 07:53:46
相対パスを格納した文字列から
絶対パスを格納した文字列を得るポータブルな方法はありますでしょうか?
Visual C++ だと _fullpath() という関数があるのですが、
他の環境でも使えるような方法があれば教えてください。

497 :デフォルトの名無しさん:2006/02/01(水) 08:01:54
Visual C++ では ANSI 標準関数には _ なしの名前が、
ANSI非標準の関数には _ 付きの名前が割り当てられています。

これは POSIX 関数には _ 付きの名前が割り当てられる
ということを意味しますか?例えば MSDN Library では
getcwd の代わりに _getcwd を使うよう推奨しています。
しかしこうすると同じコードを UNIX/Linux などに
持って行ったときに修正が大変です。

Visual C++ / cygwin / Linux でポータブルなプログラムを
書きたい私は getcwd と _getcwd のいずれを使うべきでしょうか?

498 :デフォルトの名無しさん:2006/02/01(水) 08:13:43
・どっかからポータブルなライブラリを拾ってくる。
・自分で作ってそこに環境依存な処理を隠蔽する。

499 :デフォルトの名無しさん:2006/02/01(水) 08:45:52
MSDN Library を呼んでいると、

「Visual C++ 2005 では、この POSIX 関数は使用しないでください。
 代わりに ISO C++ 準拠の _getcwd を使用してください。」

と書いてあるのですが、 _getcwd って ISO C++ 準拠なんでしょうか?

500 :デフォルトの名無しさん:2006/02/01(水) 10:17:42
>>497
マクロで一方の表記に統一する

501 :デフォルトの名無しさん:2006/02/01(水) 10:28:24
やっぱマクロ使って表記統一ですか。
皆様ありがとうございました。
ちなみに余談ですが、プラットフォーム間パスの表記の違いは
boost::filesystem::path で切り抜けることにしました。

502 :デフォルトの名無しさん:2006/02/01(水) 11:01:36
int_ntop,inet_ptonはスレッドセーフなのでしょうか?

環境は以下の通りです。
Redhat Linux カーネルver 2.4.21
gcc 3.2.3

503 :デフォルトの名無しさん:2006/02/01(水) 17:19:28
Windowsの編集ボックスでIMEの変換をすると、
1単語変換するごとに100KBほどメモリリークするようなのですが、
これは何とかならないのですか?
同じ単語を変換してもメモリ使用量は増えないので、キャッシュと見ることもできますが、
それでも、何千単語も変換されるうちにメモリ使用量が数百MB増えてしまいます><
根本的な解決にならなくてもいいので、何か回避策を教えてください。

504 :デフォルトの名無しさん:2006/02/01(水) 17:22:52
>>503
C/C++と何の関係があるのか?と小一時間(ry

505 :デフォルトの名無しさん:2006/02/01(水) 17:42:23
>>503
ついでに、おまえは実際何千単語も変換してメモリ使用量の変移を確認したのか?と小一時間(ry

506 :503:2006/02/01(水) 18:29:47
プログラムを最小化したらなぜか開放されました。
その線で探ってみます。
>>505
いやまじです。新しい単語を次々変換していくと、本当に100KB程度ずつメモリ使用量が増えていきます。

507 :デフォルトの名無しさん:2006/02/01(水) 18:49:39
だから実際に何千単語もやったんかと

508 :デフォルトの名無しさん:2006/02/01(水) 18:55:17
メモリー使用量なんぞでメモリーリークを検出できると思ってる馬鹿はほっとけ。

509 :デフォルトの名無しさん:2006/02/01(水) 18:57:01
ていうか、最小化で解放されてるんだからリークではないわな。

510 :503:2006/02/01(水) 19:00:26
どうやらWindowsのWorkingSetという仕組みが絡んでるようでした。
なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
SetProcessWorkingSetSizeで強制的に全て開放させられるのですが、必要なメモリもスワップされちゃうので、
もうちょっとましなやり方がないか探してみます。

>>508
必要ないメモリを開放しないこと=メモリリークと思ってましたが微妙に違うようですね><

511 :デフォルトの名無しさん:2006/02/01(水) 19:05:11
>>509
最小化しないアプリを作ってるんです><
というか定期的に最小化するアプリを作るわけにはいかないので・・・。

リークではないけど、他のプロセスがメモリを使いたくても使えなかったり、
システム自体が重くなるので、無駄なメモリの使用は避けたいのです。

たとえリークでも、一度プロセス終了して起動しなおせば開放されますけどね・・・。

512 :デフォルトの名無しさん:2006/02/01(水) 19:35:19
>>511
「無駄なメモリーの使用」かどうかは君が判断することじゃない。

513 :503:2006/02/01(水) 19:41:41
>>512
どうしてもWindows用の高効率アプリを作りたいので、自分で判断したいのです><

予約してるメモリだけを開放する関数はないのだろうか・・・。

514 :デフォルトの名無しさん:2006/02/01(水) 19:59:30
一時的に巨大なメモリを割り当てて故意にスワップを起こさせたら
メモリの空きが増えるかも(メモリクリーナの動作原理らしい)
でもCPU使用率が上がるから効率悪いがwwww

515 :503:2006/02/01(水) 20:23:34
>>514
SetProcessWorkingSetSizeで使用量をほとんど0にできるのですが、
負荷が大きすぎるし、必要なメモリまでスワップされてスローダウンするので、
予約してるメモリだけ開放できる方法がないか探してます。

516 :デフォルトの名無しさん:2006/02/01(水) 21:34:38
>>514
そんなことしたら、別のプロセスで必要なメモリがスワップに追いやられたり、
仮想メモリと物理メモリのアドレスのキャッシュも消えたりして、いいことなんてまったくないと思うが。


>>515
IMEと同じものを、自分で実装したまえ。
そこまで気にする貴方なら、
さぞかしすばらしくメモリ効率のいいものを、実装できるはずだ。

517 :デフォルトの名無しさん:2006/02/01(水) 21:37:32
>リークではないけど、他のプロセスがメモリを使いたくても使えなかったり、
>システム自体が重くなるので、無駄なメモリの使用は避けたいのです。
そのへんはOSがよきにはからってくれるので気にするな。

>なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
メモリを1バイト単位で管理してるわけじゃないからね。
ページサイズ分はどうやっても確保されるんじゃね

518 :デフォルトの名無しさん:2006/02/01(水) 21:54:21
>>487氏ではないけど、Express Edition落としてVC始めようと思ってるんだけど、
誰かVC#2005EEとVC++2005EE、どっちがどう違うのか教えてくれ(´д`υ

MS-DOS上でMSCv6扱ってたことはあるんだが、Win+VCとなると使ったこと無いので差が判らんなりよ。。

519 :デフォルトの名無しさん:2006/02/01(水) 21:55:42
教えてクンは氏ね

520 :デフォルトの名無しさん:2006/02/01(水) 21:59:55
>>518 何が違うって言語が違うじゃん。

521 :デフォルトの名無しさん:2006/02/01(水) 22:07:40
>>518
どの言語かもわからんやつが来る場所ではない
初心者以前じゃ

522 :503:2006/02/01(水) 22:22:21
>>516
激しくめんどくさそうですが、IMEを自作すれば色々とメリットがあるので、
その線で検討してみます。

523 :503:2006/02/01(水) 22:45:34
IMEを自作するくらいなら編集ボックスを自作した方が簡単そうなので、
こっちにします。
文字列変換が必要になったら別プロセスを立ち上げ、変換が終わったらそのプロセスを終了する。
これで無駄なメモリ使用とおさらばできるはずです。

524 :503:2006/02/01(水) 22:53:27
プロセスの起動と終了を繰り返すのも効率が悪いから、
文字列変換用のヘルパープロセスは起動しっぱなしで、
変換が終わったらSetProcessWorkingSetSizeでメモリ開放した方が効率いいかな。

525 :デフォルトの名無しさん:2006/02/01(水) 22:54:12
つ[チラシの裏]

526 :デフォルトの名無しさん:2006/02/01(水) 22:55:12
ちょっと待ちなさい。
あなたのような潔癖症の人間は、OSから作った方がよいと思われます。

527 :デフォルトの名無しさん:2006/02/01(水) 23:06:20
というか、釣りでなければ、思考が80年代だぞ。

メモリの容量や用途は、時代とともに変わっていくもので、
MSの、Windoesのメモリマネージャ開発者もそのことは十分承知している。

Windows95などでは、使われなくなったメモリは、
かなり早い時点でスワップに退避させるような設計になっていると思う。
あの頃はメモリ数十MBだったから。

でも今は、1, 2GBのメモリをつんでいる人も珍しくないので、
必要になるまで、物理メモリを割り当てたまま放置するような設計になっていると思う。


やはり>>503は、OSから自作すべきだと思うよ。

528 :503:2006/02/01(水) 23:12:59
>>527
「必要になるまで、物理メモリを割り当てたまま放置するような設計」
というのは理解できるのですが、
いざ必要になったときの処理がものすごく適当なので、その設計には頼りたくないのです。
というかOSの設計者はメモリが不足したときのことをぜんぜん考えてない気がします。

529 :デフォルトの名無しさん:2006/02/01(水) 23:19:46
XPあたりで一番物理メモリくわえ込んでるのはファイルキャッシュだったりするがな。
おかげでウィルスキャッシュとかGoogle DesktopみたいにHDDスキャンするアプリがキャッシュ無効せずに走ると一気にメモリが枯渇する

530 :デフォルトの名無しさん:2006/02/01(水) 23:23:00
>>529
あるある、
DVD焼いたりしたりすると、起動中のアプリとか、どんどんスワップアウトしていきやがる。
ほんとアレ何とかならんのかね?

531 :503:2006/02/01(水) 23:28:13
>>530
64bit版のOSにしてHDDの数倍のサイズのメモリを積んどけばいいのでは?

532 :503:2006/02/01(水) 23:31:08
すいません冗談です><
ディスクキャッシュのサイズを制限するか無効化すれば良いと思います。
XPでどうやるのか知りませんが。

533 :デフォルトの名無しさん:2006/02/01(水) 23:37:55
Itaniumなんか使ってられっか!

534 :デフォルトの名無しさん:2006/02/02(木) 00:08:20
>>532
結局のところスワップアウトが嫌なら、ページファイル無効にしとけばいいんじゃないの?

535 :デフォルトの名無しさん:2006/02/02(木) 00:19:12
>>503
さっきから訳の解らないこと行ってるんじゃネェヨ!
てめぇの言っている現象はリークじゃねぇ、
と皆さんが言っているのに、何故聞き入れないのだ?

536 :503:2006/02/02(木) 00:24:27
混沌としてるなー・・・。

537 :デフォルトの名無しさん:2006/02/02(木) 00:27:30
>503はLinux使うと虫唾が走るんじゃなかろうかw

538 :デフォルトの名無しさん:2006/02/02(木) 00:31:52
なんでそこまでメモリ使用量にこだわるかな・・・

539 :デフォルトの名無しさん:2006/02/02(木) 00:34:31
503は病気なんです、皆さん温かい目で見守ってください

540 :503:2006/02/02(木) 00:36:42
スレが荒れてしまってすいません><

541 :デフォルトの名無しさん:2006/02/02(木) 00:37:54
マジレスすると、ATOK2004はDOS窓でメモリリークするバグがあったはず。
ATOK2005にしてからは直っている。もうすぐ2006も出るし、FEP変えるとか。

542 :503:2006/02/02(木) 00:42:31
>>534
>>531>>532>>530へのレスなんですが、
ページファイルを無効にすると、結果的にディスクキャッシュの使用を抑えられるということですか?

543 :デフォルトの名無しさん:2006/02/02(木) 04:54:06
いったいなんて言うツールでメモリ使用量見てるのさ。
>>503 が「メモリ消費」っていってるのは、おそらく
>>503 が脳内でイメージしているメモリ消費とは違うと思うんだが。

544 :デフォルトの名無しさん:2006/02/02(木) 05:54:22
>>543
お前の脳内イメージはどうでもいいよ

545 :デフォルトの名無しさん:2006/02/02(木) 09:55:48
>>541
> FEP

最近ではIMEが正しいらしいよ

# 漏れもFEPの方がしっくりくるが。

546 :503:2006/02/02(木) 23:19:30
SetProcessWorkingSetSizeの最小と最大に、
GetProcessMemoryInfoで取得したページファイル使用サイズ(こっちが本当に必要なメモリサイズらしい)を指定したら、
不要なメモリだけ開放できたっぽいのでこっちでいきます。
うまく動作しなかったら、またヘルパープロセスでIMEを操作するやり方にしますが。
簡単な解決策が見つかって良かった><

547 :デフォルトの名無しさん:2006/02/04(土) 19:37:07
ポインタが指すオブジェクトの存在を
確認する事は出来るんでしょうか

int *pa, *pb;

pa = new int;
*pa = 5;
pb = pa;
delete pa;
pa = NULL;

if( pb )
 cout << "在るでよ。" << endl;

ポインタが指す delete C++ -java
とググッてもなかなか見つからない。
やはり無いのでしょうか。

548 :デフォルトの名無しさん:2006/02/04(土) 19:47:48
>>547
やはり環境依存のコードを書くしかないんじゃないかな。

Windows限定で言うと、
実際にアクセスしてみて、問題なければ存在している。
メモリが割り当ててなければ、AVが飛んでくるから、
構造化例外で受けて、何事もなかったかのように実行再開

よほど特殊な事情がない限りお勧めできない
(大量のメモリを予約だけしてコミットしない、必要な部分だけコミットする。)



549 :デフォルトの名無しさん:2006/02/04(土) 19:50:43
>>548
それだとdeleteがOSにメモリを返さずにプールする実装だと死ぬなw
>>547
C++ならboost::weak_ptrとboost::shared_ptrの併用で良いんじゃないの

550 :547:2006/02/04(土) 20:10:58
レス有難うございます。

>>548
Win環境だけならアクセスして、ポインタ先を見るのですな。
>>549
boost::shared_ptr初めて見ましたのでググッてみました
なるほど。参照の状況によって適切にdeleteなんぞしてくれるのですな。
スバラスィ

どの様な環境にも耐えられるように
>>549案でチャレンジしてみます。
有難うございました。

551 :547:2006/02/04(土) 20:15:59
boost C++ Libraries
英語が読めんとです・・・

ここは自分でポインタを
しっかり管理するしかないですな
ひと段落したら boost をやっちみます

552 :デフォルトの名無しさん:2006/02/04(土) 20:18:12
>551
ttp://boost.cppll.jp/HEAD/

553 :デフォルトの名無しさん:2006/02/04(土) 20:23:45
>>551
ttp://www.kmonos.net/alang/boost/

554 :547:2006/02/04(土) 20:47:19
>>552-553
おお!日本語サイトですか有難うございます

しかしながら
ラインセスは英語で小難しいとです・・・
エキサイトにぶち込んでみたところ

無料で提供します。
版権情報と注意書きはちゃんと書いてください。

という事でいいんでしょうか。
わからないのが”ライセンス交付金”という奴なのですが


555 :デフォルトの名無しさん:2006/02/04(土) 20:54:14
boostのライセンスに、特に気にするような部分なんてあったかな。
商用でもOKで、ソース公開の義務もないし、
boostを手本にして書いたコードは、勝手に自分独自のライセンスにしてOKだったはず。

556 :547:2006/02/04(土) 21:11:48
>>555
そうだったのですか。
小難しく考えすぎました。

557 :547:2006/02/05(日) 00:13:50
boostの威力を堪能
おかげさまで、コードが綺麗になりました

数々の情報有難うございました。

558 :デフォルトの名無しさん:2006/02/06(月) 06:59:13
GNUのindentみたいなソース整形ツールの、
GUI風に使えるソフトがありましたら教えてください。

559 :デフォルトの名無しさん:2006/02/06(月) 09:38:37
Windows XP & Borland C++ 5.02Jでデータ処理アプリケーションを作っていますが、
バッファを確保しようとするとAccess violationエラーが発生します。

unsigned* pBuf = new unsigned[150000]; // ここでエラー発生
.
.
delete [] pBuf;

1GもRAMを搭載しているのに60万バイトのメモリブロックすら確保できないのは
なぜでしょうか。

560 :デフォルトの名無しさん:2006/02/06(月) 09:47:58
>>559
16bitモードで使ってるのと違う?

561 :デフォルトの名無しさん:2006/02/06(月) 09:54:18
32ビットモードでコンパイル・実行しています。
念のためコンパイラのオプションでヒープサイズを変えられないか調べてみましたが、
それらしい設定項目は見当たりませんでした。
ひょっとして.defファイルの中でヒープに関する設定をする必要があるのでしょうか。

562 :デフォルトの名無しさん:2006/02/06(月) 10:21:07
>>559
マジレスすると、確保できる量はだいたいOSと、コミットできるメモリ量で決まる。
WindowsXPなら、何もいじらなければおおよそ2GBまで確保できる(スワップ
ファイルを含む)

俺も5.02Jを使っていた事があるけど、その程度ではビクともしないはず。
試しに、newでなくて、staticでどれだけ確保できるか試してみそ。

それと、5.02Jは古いC++なので、bad_allocを返さないので、pBufが
0だったら確保に失敗しているよ。

563 :デフォルトの名無しさん:2006/02/06(月) 10:49:31
.DEFのHEAPSIZEは、省略時は4096、つまり4Mバイト。
今は 4 × 150000 = 600000 バイト必要なんだから、HEAPSIZEを
1000000 くらいに設定してみてはどうか。

564 :デフォルトの名無しさん:2006/02/06(月) 10:58:21
久しぶりに5.02Jの分厚いマニュアルを出して来たので、頭が混乱してる。

600000バイトって600Kバイトだから、デフォルトで足りそうなんだが・・・・

565 :デフォルトの名無しさん:2006/02/06(月) 11:10:05
int Complex::im(){
return imaginary;
}
int Complex::re(){
return real;
}
....
//非メンバ関数
ostream& operator<<(ostream &out, const Complex &cNumber){
out<<"Complex:"<<cNumber.re()<<"+i "<<cNumber.im();
return out;
}

というような感じの関数があるのですが、これをコンパイルすると
「error: passing 'const Complex' as 'this' argument of 'int Complex::re()' discards qualifiers」
というメッセージが出てくるのですが、
re()の中でも im()の中でもメンバーには手をつけてないのにこのエラーが出るのはなぜなのでしょうか?


566 :デフォルトの名無しさん:2006/02/06(月) 11:11:58
関数間でデータを受け渡す場合これでいいんでしょうか?
char* test(){
 return "koredeiinokana"; //←本当はデータを取得するから大きなデータ
}
void main(){
 printf(test());
}
ポインタを直接渡していいのかいまいち自信がありません。

567 :デフォルトの名無しさん:2006/02/06(月) 11:13:36
>>566
test()が返す文字列の中に書式指定文字列があると、
変な事になるぞ。

568 :599:2006/02/06(月) 11:19:20
レス、どうもです。

>>562
unsigned* pBuf = new unsigned[150000]; // ここでエラー発生

static unsigned pBuf[1000000]; // 4M byte
としたらエラーは発生しませんでした。

>>563
私も原因はそれかなと思い、バッファサイズを10000byteに減らして見ましたが、
やはり確保に失敗しました。

ちなみに>>559のトラブルはメインウィンドウを作成せずにバッチ処理だけを実行
するアプリケーションで発生しました。メインウィンドウを作成するアプリで同
サイズのメモリブロックを取得・解放する場合にはエラーは発生しません。

うーん訳わからん。原因追求するよりは素直にC++Builderあたりに移行した
方が速いのかも。

569 :デフォルトの名無しさん:2006/02/06(月) 11:23:50
>>568
変ですねえ。コマンドラインであっても、GUIベースであっても、
基本的には同じはずなんですが。

staticで確保できるって事は、ヒープ領域は問題なさそうですね。
5.02Jインストールしてあるマシンが手元にないので、はっきりした
事は言えないのですが、記憶では、何もしなくてもそのまま動作
したような記憶があります。

570 :デフォルトの名無しさん:2006/02/06(月) 11:30:24
>>568
アプリによって動作が変わるんなら、エラーの出るほうでヒープをぶっ壊してるんだろう。

571 :デフォルトの名無しさん:2006/02/06(月) 11:33:59
>>565
int Complex::im() だと this の型は Complex* になる。
この場合は Complex const* を受け取るようにメンバ関数の宣言(定義)を変えればいい。

int Complex::im() const ...
int Complex::re() const ...

572 :デフォルトの名無しさん:2006/02/06(月) 12:20:50
>>571
なるほど… constを関数宣言の最後につけるんですね。
新しい文法をまた学びました、ありがとうございます。

573 :デフォルトの名無しさん:2006/02/06(月) 15:14:48
現在大学の研究用にプログラムを書いているのですが、
newで確保した三次元配列をdeleteで開放してもメモリ使用量が変わりません。
とりあえず次のような簡単なプログラムで確認をしているのですが、
繰り返すたびにメモリの使用量が増えていきます。
おかしいところはあるでしょうか?ご指導よろしくお願いします。
#include<fstream.h>
#include<math.h>
double ***test;
main(){
int i,o,t,n,m;
while(1){
cin>>i>>o>>t;
test=new double**[i];
for(n=0;n<i;n++){
test[n]=new double*[o];
for(m=0;m<o;m++){
test[n][m]=new double[t];
}
}
for(i=0;i<3;i++)cin>>test[0][0][i];
for(i=0;i<3;i++)cout<<test[0][0][i]<<endl;
for(n=0;n<i;n++){
for(m=0;m<o;m++){
delete[] test[n][m];
}
delete[] test[n];
}
delete[]test;
test=NULL;
cout<<"END test"<<endl;
}
}

574 :573:2006/02/06(月) 15:18:01
忘れてましたがコンパイラはborlandの物を使っています。

575 :デフォルトの名無しさん:2006/02/06(月) 15:22:18
>>574
この部分でi書き換えてるからループの回数がおかしくなったんだよ
for(i=0;i<3;i++)cin>>test[0][0][i]; 
for(i=0;i<3;i++)cout<<test[0][0][i]<<endl; 

576 :575:2006/02/06(月) 15:23:28
つまりこの部分のiが狂ってるってことな
for(n=0;n<i;n++){ 

577 :573:2006/02/06(月) 15:31:40
レスありがとうございます。
うかつでした・・・
しかし、書き換えてみたのですがやはりメモリが増え続けてしまいます。
グローバルでの宣言が駄目なのでしょうか?

578 :デフォルトの名無しさん:2006/02/06(月) 15:40:55
>>577
どう書き換えたの?
こっちではその部分の書き換えでリークは無くなったけど。

あと無理してnewしなくてもstd::vector使ったほうが良いと思うよ

579 :デフォルトの名無しさん:2006/02/06(月) 16:17:25
タスクマネージャのメモリー使用量で確認してる痛い子ってだけだろ?

580 :デフォルトの名無しさん:2006/02/06(月) 16:19:11
int main(){
print


581 :573:2006/02/06(月) 16:26:36
とりあえずその部分のiをnに変えてやってみました。
std::vecterを試してみます。

582 :デフォルトの名無しさん:2006/02/06(月) 16:33:44
>>581
vectorでそれと等価になるように書けばこんな感じ
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
vector<vector<vector<double> > >test;
int main(){
    int i,o,t,n,m;
    while(1){ 
        cin>>i>>o>>t;
        test.assign(i,vector<vector<double> >(o,vector<double>(t)));
        for(n=0;n<3;n++)cin>>test[0][0][n];
        for(n=0;n<3;n++)cout<<test[0][0][n]<<endl;
        cout<<"END test"<<endl;
    }
}

583 :デフォルトの名無しさん:2006/02/06(月) 17:03:02
>>559
Windowsでそんなに大量のメモリを確保するのなら、
直接VirtualAllocを呼ぶほうがよい。

584 :599:2006/02/07(火) 11:55:48
>>583さん
レス有り難うございます。
VirtualAllocについては初めて知りました。ただ件のアプリの場合は、同じコードを
コマンドラインで実行するとエラーになり、GUIではならないことから>>570さんの
ご指摘の通りどこかで不正な処理を行っていると思われます。もっとも特定は
かなり難しそう。と思っていたら、あれれ、おかしいぞ

int *p = new[1000000];
delete [] p;

この二行をコードの随所で実行してどこでエラーが生じるか調べていたんですが、
配列の長さを即値で渡しているときにはエラーにならないのに、
int len = 1000000;
int *p = new int[len];
と配列長を変数で渡すとエラー発生。はて?

585 :デフォルトの名無しさん:2006/02/07(火) 12:14:02
ヒント:intが2バイト

586 :デフォルトの名無しさん:2006/02/07(火) 12:38:59
Borland C++ 5.02Jのintは4byteだった希ガス。
16bitコード吐けたっけ?

587 :デフォルトの名無しさん:2006/02/07(火) 12:40:24
>>585
559 に「Windows XP & Borland C++ 5.02J」とあるから、さすがにそれは無いと思うよ。

588 :デフォルトの名無しさん:2006/02/07(火) 13:08:59
>>586
16bitコード吐けるけど、デフォルトは32bitだよ。
デバッガ走らせてCPUウィンドゥを開けばすぐわかる。

589 :559:2006/02/07(火) 13:32:50
原因判明(多分)

int XXX(const string& param)
{
// paramの保持する文字列から", "で区切られたトークンを逐次取り出す

char* pchBuf = new char[param.length()];
strcpy(pchBuf, param.c_str());

char* p = strchr(pchBuf, '=') + 1;
for(p = strtok(p, ", "); p; p = strtok(0, ", "))
{
.
.
}
delete [] pchBuf;
}

これを実行すると
1.最後のトークンの語尾に不正な文字が付け加えられる。
2.直後にnewでメモリブロックを確保しようとするとエラーが発生。

char* pchBuf = new char[param.length()];

char* pchBuf = new char[param.length() + 2];
として余分なスペースを確保してやるとエラーは発生しなくなりました。
一見関係なさそうだったので気づくのが遅れ、どうもお騒がせしました。
それにしてもヒープ管理にまで支障をきたすとは、strtokは使い方を間違うと大変ですね。

590 :デフォルトの名無しさん:2006/02/07(火) 13:46:42
>>589
お前馬鹿か?
strtok以前にここで問題に気づけ。
char* pchBuf = new char[param.length()]; 
strcpy(pchBuf, param.c_str()); 

#といっても俺もこのミスたまにやるんだよなぁ

591 :デフォルトの名無しさん:2006/02/07(火) 13:51:54
いい加減Cの文字列処理関数はまとめて捨てろ。

592 :デフォルトの名無しさん:2006/02/07(火) 14:57:15
ヌルターミネータの領域を考慮する癖は
絶対につけておかねばな。

593 :デフォルトの名無しさん:2006/02/07(火) 15:05:47
char* pchBuf = new char[param.length() + 1];
param.copy(pchBuf, std::string::npos);
pchBuf[param.length()] = 0;
が正解かな
なんか長くてうっとうしいな

594 :デフォルトの名無しさん:2006/02/07(火) 15:10:08
char* pchBuf = strcpy(new char[param.length()+1],param.c_str());

595 :デフォルトの名無しさん:2006/02/07(火) 15:27:04
strdup
は奨めちゃいかんな

596 :デフォルトの名無しさん:2006/02/07(火) 15:29:53
>>595
strdupが定義されて無い環境では自分で定義する。という条件付なら良いんじゃない?
ほんの数行だし
char*strdup(char*p){
    size_t len = strlen(p);
    char*r=malloc(len+1);
    if(r)memcpy(r,p,len+1)
    return r;
}

597 :デフォルトの名無しさん:2006/02/07(火) 15:38:37
>>589=559
始めから、そのコードを晒しておけば、すぐに解決したものを…
どうして問題が再現する最小のコードを貼らないのか…

598 :デフォルトの名無しさん:2006/02/07(火) 15:39:11
いや、freeとdelete[]が変わるというのと
bad_allocを投げない(要NULLチェック)というのもあるし。
特に前者は忘れがちだし。

newを使ってbad_allocを投げる関数を自分で作ればよいだけなんだけどね。

599 :デフォルトの名無しさん:2006/02/07(火) 15:43:56
あーなるほど。自分は元の定義を尊重して、
mallocにしてたけどC++だと逆に余計なお世話だな

確かにnew[]したほうが良いか。

600 :デフォルトの名無しさん:2006/02/07(火) 21:36:44
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;

601 :デフォルトの名無しさん:2006/02/07(火) 22:12:58
はじめまして
半年前からCの勉強をしていてひと段落したのでC++に進もうと思っております

オブジェクト、クラスなどのことがわかりやすく書いてある参考書などおありましたあ教えていただけないでしょうか?
よろしくお願いいたします

602 :デフォルトの名無しさん:2006/02/07(火) 22:19:23
スレ違い。書籍スレ行け

603 :デフォルトの名無しさん:2006/02/07(火) 22:20:25
>601

推薦図書/必読書のためのスレッド PART29
http://pc8.2ch.net/test/read.cgi/tech/1138179810/

604 :デフォルトの名無しさん:2006/02/07(火) 22:24:37
>>603
サンクス

605 :デフォルトの名無しさん:2006/02/08(水) 13:02:53
とあるサンプルコードをながめているのですが、

STDMETHOD(hoge)(THIS_ LPCSTR foo);

の、STDMETHODとTHIS_ってのはどういう意味でしょうか?
文法的にも、型の前に更になんかくっついているのははじめてみたのですが、
ググってみてもこれらを当然のように使っているサンプルコードとかしか引っかかりません。
なるべく平易に教えていただけると嬉しいです。

606 :デフォルトの名無しさん:2006/02/08(水) 13:07:50
・質問者は必ず、環境を書きましょう。
・ぐぐった?

607 :605:2006/02/08(水) 13:13:23
環境はVC++6です。

608 :デフォルトの名無しさん:2006/02/08(水) 13:30:49
COMインターフェースのメソッド
定義はヘッダファイルあると思う。

609 :デフォルトの名無しさん:2006/02/08(水) 13:36:48
>>605
おそらくCOM/OLE関係のマクロで手元のVC++7.1だとObjBase.hで定義されてるものだろう。

基本的にはCとC++でCOM/OLEのインターフェイス定義を共有するための小細工。
詳しく知りたければCOM/OLE関係の解説書でも読め(Inside OLEとか)

610 :デフォルトの名無しさん:2006/02/08(水) 13:45:07
はじめまして
本日からC++をはじめた。初心者PGです。
さっそくお伺いしたいのですが。
javaで書く

data.java
----------------------
1|class data {
2|
3| public string data;
4| public string data2;
5|}
===================================
test.java
----------------------
1|import data;
2|
3|class test {
4|
5| MethodTest(data pData) {
6|
7| string strPara;
8| strPara = pData.data2;
9| }
10|}

はどのようにC++でどのように表現すればいいのでしょうか?

現在、C++でDLLを生成し VBで生成したDLLを使用する処理を作っているのですが。

DLLの呼び出し関数の引数と戻り値に 構造体を使用したいのです。
よろしくお願いします。

611 :605:2006/02/08(水) 14:02:03
>>608>>609
サンクスコ。

612 :デフォルトの名無しさん:2006/02/08(水) 15:00:38
>>610
http://pc8.2ch.net/test/read.cgi/tech/1136690107/724

613 :デフォルトの名無しさん:2006/02/08(水) 17:31:14
VC++6.0のコンボボックスについて質問です
コンボボックスで選んだ文字列を取得する場合

char str[128]; *初期化略

int no = SendMessage( GetDlgItem( hDlg, IDC_COMBO1), CB_GETCURSEL, 0, 0);
SendMessage( GetDlgItem(hDlg, IDC_COMBO1), CB_GETLBTEXT, (WPARAM)no, (LPARAM)str);



GetDlgItemText(hDlg, IDC_COMBO1, str, 127);

のどちらでもできると思うのですが、
わざわざ前者を使う意味があるのでしょうか?

614 :デフォルトの名無しさん:2006/02/08(水) 17:35:48
>>613
SendMessage  → Win32API
GetDlgItemText → MFC


615 :デフォルトの名無しさん:2006/02/08(水) 17:52:06
>>614
スッキリしました
ありがとうございます

616 :デフォルトの名無しさん:2006/02/08(水) 18:07:14
open関数で開いたファイルがeofであるかどうか調べるにはどうしたらいいですか?

617 :デフォルトの名無しさん:2006/02/08(水) 18:22:02
>>616
_eof

618 :デフォルトの名無しさん:2006/02/08(水) 19:12:04
>>617
Windows上のようですが、UNIXの場合どうしたらいいですか?

619 :デフォルトの名無しさん:2006/02/08(水) 19:42:21
>>618
lseek(SEEK_END)で返ってくるバイト数が
直前に呼んだlseekに渡したバイト数以下ならeof。

620 :デフォルトの名無しさん:2006/02/08(水) 19:43:08
>>619
ありがとうございます。

621 :デフォルトの名無しさん:2006/02/08(水) 20:31:30
>614
GetDlgItemTextはAPIにもあるよ。

622 :デフォルトの名無しさん:2006/02/08(水) 20:41:42
SendMessageに比べて引数が省略される代わりに
関数名に入っている感じかな。

623 :デフォルトの名無しさん:2006/02/08(水) 22:10:53
>>610
//data.h
#include <string>
class data {
public:
    std::string data;
    std::string data2;
};

//test.cpp
#include <string>
#include "data.h"
class test {
    MethodTest(data Data) {
        std::string strPara = Data.data2;
    }
};
もっともVB相手にstd::stringは使えないけどね。


624 :デフォルトの名無しさん:2006/02/09(木) 02:13:55
プロンプトでプログラム実行すると、
目にも止まらぬ速さで窓が自動的に閉じてしまいます。
解決するにはどうすればよいのでしょうか?

ちなみにC++です。

625 :デフォルトの名無しさん:2006/02/09(木) 02:16:29
>>624
動体視力をもっと鍛えるんだ!!!

626 :デフォルトの名無しさん:2006/02/09(木) 02:37:46
>>624
まず、キーボードを良く見よう。

そう、あるはずだ。
PrintScreenと書かれたキーが。

あとは分かるな?

627 :デフォルトの名無しさん:2006/02/09(木) 03:07:46
>>624
system("pause");

628 :デフォルトの名無しさん:2006/02/09(木) 03:21:45
>>625-627
サンクスコ!

629 :デフォルトの名無しさん:2006/02/09(木) 04:03:43
>>625-627
ワラタ
他にはreturnの前にgetchar();もしくはコマンドプロンプトでその
フォルダに移動してから、コマンドプロンプトで実行

630 :デフォルトの名無しさん:2006/02/09(木) 10:45:15
>>623

ありがとうございました。

VBからの引数はchar*で宣言を行い。
623さんの、やり方を行ったところうまくいきました。

631 :デフォルトの名無しさん:2006/02/09(木) 10:56:53
IDE からなら Ctrl + F5 とかどうよ。

632 :デフォルトの名無しさん:2006/02/09(木) 14:20:19
inlineって、プロトタイプに付ければいいんですか?
それとも、関数本体に付ければいいんですか?


633 :デフォルトの名無しさん:2006/02/09(木) 14:25:01
おでこに付けるといいよ。

634 :デフォルトの名無しさん:2006/02/11(土) 02:06:41
インリンって、、、

635 :デフォルトの名無しさん:2006/02/12(日) 04:41:47
Javaではclass1がclass2を含み、class2がclass1を含むことができましたが、
C++で同じようなことをやるとコンパイルする時点でどちらかがもう片方をタイプ名だと認識してくれません。
例えば、

//World.h
#include "People.h"
#ifndef h_Wrld
#define h_Wrld
class World{
...
People* array_of_population;
};
#endif


//People.h
#include "World.h"
#ifndef h_Ppl
#define h_Ppl
class People{
...
void interact(World thisWorld);
};
#endif

とやったあと
g++ World.cpp People.cpp Tester.cpp -o Test.out
World.h内でPeopleを型だと認識しないと言う旨のエラーが出てきます。
たぶんJavaではBytecodeをクラスごとに作成して動的に全てをリンクしていたために
上記のようなことが可能だったと思うのですが、C++では可能なのでしょうか?

636 :デフォルトの名無しさん:2006/02/12(日) 04:46:48
可能です。

637 :デフォルトの名無しさん:2006/02/12(日) 05:31:57
>>636
可能だということが分かったのでEssential C++とThinking in C++を
もう1回隅々まで読んでヒントを探してみます。
ありがとうございます。

638 :デフォルトの名無しさん:2006/02/12(日) 05:56:21
ヒント:ポインタや参照は、それを使って実際に参照を行うコードが出てくるまでは、不完全型でも良い

639 :デフォルトの名無しさん:2006/02/12(日) 06:17:28
#define h_Wrld
class People; // Peopleクラスの宣言
class World{
     中略
};

class People { // Peopleクラスの定義
     以下略

640 :デフォルトの名無しさん:2006/02/12(日) 11:06:23
質問です。XP、.NET 2003 です。

エディットコントロール上で Enter キーを押したときに、
エディットコントロール上、もしくは親ダイアログ上で特殊な処理を行うには、どうすればよいでしょうか。

Tab キーも同様ですが、IsDialogMessage でダイアログにメッセージを振り分けても、
Tab の場合は次のコントロールにフォーカスを移動するなど、デフォルトの処理が呼び出されるだけで、
ダイアログのやエディットのプロシージャには、WM_KEYDOWN すら飛んできません。

現在は、メッセージループ上で、WM_KEYDOWN を検知してかつ uMsg.wParam == VK_RETURN のときに
独自のメッセージ (WM_APP+xxx) を uMsg.hwnd に送り、
エディットコントロールのプロシージャで WM_APP+xxx を受け取っています。

何かスマートな方法があればよろしくお願いします。



641 :デフォルトの名無しさん:2006/02/12(日) 11:31:22
サブクラス化

642 :デフォルトの名無しさん:2006/02/12(日) 12:32:50
すいません、初心者なんですが。最近C言語の勉強を始めました。
本を見ながら学んでいるのですが、char型変数は漢字を表現できるのでしょうか?
コンパイルしても、文字化けするのですが。教えてください、よろしくお願いします。

643 :デフォルトの名無しさん:2006/02/12(日) 12:44:03
>>642
charは無理。char*なら環境依存。wchar_tなら確実。

644 :デフォルトの名無しさん:2006/02/12(日) 12:50:34
さっそくありがとうございます。たぶん本が間違っているのだと思います。
もう一冊の本にはできないと書いてありました。ダウンロードしたファイルも
間違っているのみたいですね・・・本選びからはじめます。ありがとうございました。

645 :デフォルトの名無しさん:2006/02/12(日) 13:15:05
>>644
漢字はどの漢字コードでも最低2バイト。
char型はsizeofすればわかるけど1バイト。
入るわけがない。
char[]やchar*な文字列は2文字分にまたがって格納できるからOK。

あと間違っても
char str[16];
str = "漢";とかstr = '漢';などとやらないように。

646 :644です:2006/02/12(日) 13:25:50
>>645
すいません、全くわからないです。まだ始めたばかりで、char*というのは
なんでしょうか?この本のは

char moji1='本';

という感じなんですけど。環境がいけないのでしょうか?



647 :デフォルトの名無しさん:2006/02/12(日) 13:27:20
これは酷い。

始めたばかりで分からないのは当然。
しばらく進めてから質問汁

648 :デフォルトの名無しさん:2006/02/12(日) 13:34:15
>>646
本当にそのまんま書いてあるならそのファイル作った香具師殴り殺していい。

649 :デフォルトの名無しさん:2006/02/12(日) 13:36:27
実はJavaの本だと予想してみる

650 :644です:2006/02/12(日) 13:42:03
C言語の本なんですが。もう少し勉強してみます。すいませんでした

651 :デフォルトの名無しさん:2006/02/12(日) 14:13:04
まず本のタイトルを晒してみようか

652 :デフォルトの名無しさん:2006/02/12(日) 14:16:44
「図解入門 よくわかる最新C言語の基本と仕組み」です。

653 :デフォルトの名無しさん:2006/02/12(日) 14:24:46
独習Cの方が良くないか?猫でも〜よりはましだと思うが、まっ個人の自由だけどな

654 :デフォルトの名無しさん:2006/02/12(日) 14:26:18
まず壁紙用に時計つくればいいよ。


655 :644です:2006/02/12(日) 14:32:12
XPで Borland C++ Compiler 5.5 です。

char moji2='本'
printf("%c",moji2);

というやり方ではできないですよね?なんどもすいません

656 :デフォルトの名無しさん:2006/02/12(日) 14:43:42
char moji2='h';

657 :デフォルトの名無しさん:2006/02/12(日) 14:58:35
本も間違ってるし、サンプルも間違い

658 :デフォルトの名無しさん:2006/02/12(日) 15:33:45
>>655
日本語だのやりたいなら、char*がなんなのか分かるようになってからだ

659 :デフォルトの名無しさん:2006/02/12(日) 15:36:04
本には
char moji2='A'
printf("%c",moji2);
とかって書いてあるのに
644が勝手に2バイト文字を突っ込んで動かないってほざいてるだけだろ、たぶん

660 :644です。:2006/02/12(日) 15:50:18
本には
char moji2='言';
と書いてあります。
確かに漢字が使われており、「c言語」と表示しようとしています。
うそではないです。ご迷惑をかけてすいません。勉強します。

661 :デフォルトの名無しさん:2006/02/12(日) 16:00:01
いくらなんでもそんな無能が本書くわけないだろw
数学の計算ミスとかそんなレベルでなく、それがネタでなくて
ガチだったら池沼もいいとこ。

662 :デフォルトの名無しさん:2006/02/12(日) 16:02:33
char str[] = { 'h', 'e', 'l', 'l', 'o' };
と初期化すれば6バイト割り当てられておまけに最後に'\0'で初期化されると書いてあった
「はじめてのC++」並にひどいな

663 :デフォルトの名無しさん:2006/02/12(日) 16:02:57
ネットでもサンプルおとせますよ。本当にうそではないです。

664 :デフォルトの名無しさん:2006/02/12(日) 16:04:33
その本で勉強するのマジやめとけ。

「入門書としてはほかのものと同じようなレベル。
ただ、本文中のコードに多くのミスが見受けられた。
このようなミスは入門者には混乱のもととなるはず。
あまり親切な作りとは言い難い。」
ttp://www.rentalserver-hikaku.jp/books/data/4798002836/

665 :デフォルトの名無しさん:2006/02/12(日) 16:08:08
凄いな。そんな本があるんだ。
折角買った本でも、時間を無駄にして役に立たない知識をつけるより
ずっといいよ。

666 :デフォルトの名無しさん:2006/02/12(日) 16:16:57
ありがとうございます。違う本で勉強します。読み始めたばっかで
間違いに気づいて良かったです。サンプルも間違えていて、信じていただけて
うれしいです。ありがとうございました。

667 :デフォルトの名無しさん:2006/02/12(日) 16:30:30
一体なんて言う本ナンダ?

668 :デフォルトの名無しさん:2006/02/12(日) 16:50:56
>>667
>>664に出てるだろ?

669 :デフォルトの名無しさん:2006/02/12(日) 16:56:32
図解入門 よくわかる最新C言語の基本と仕組み―標準C言語プログラミング教本
How‐nual Visual Guide Book

秀和システム2002/03

横田 一輝 の検索結果
 Illustrator文書作成術
 住所録のデータを年賀状ソフトに変換できる本
 しっかりわかるコントロールパネル―Windows98/98SE編
 事例引き Access「クエリ」ハンドブック
 PCサーバのしくみ 入門ビジュアル・コンピューティング
あとJAVA,C#本が数冊

670 :デフォルトの名無しさん:2006/02/12(日) 17:00:52
図解入門 よくわかる最新C言語の基本と仕組み
横田 一輝 (著)
出版社: 秀和システム ; ISBN: 4798002836 ; (2002/03)

横田一輝のプロフィール
http://www.cyber.kyoto-art.ac.jp/~joho/prof/yokota/yokota.html

横田の著書一覧
http://www.amazon.co.jp/exec/obidos/search-handle-form/ref=s_b_rs/250-2959840-0889036


671 :デフォルトの名無しさん:2006/02/12(日) 17:01:21
いくらなんでも糞過ぎるだろ
詐欺じゃね?

672 :デフォルトの名無しさん:2006/02/12(日) 17:03:11
なんかアプリの本とJava本ばかりだな。
最近はC#の本を出してる。

Cの本はこれ以外にないから、あまり期待できんな。
京都造形芸術大学の講師らしい。


673 :デフォルトの名無しさん:2006/02/12(日) 17:06:18
そもそも畑違いの人間かよ

674 :デフォルトの名無しさん:2006/02/12(日) 17:06:34
あの意味不明なCM流してる所か
糞っぽい大学だなと思ってたらやっぱり中の人も同レベルか

675 :デフォルトの名無しさん:2006/02/12(日) 17:07:15
図解入門 よくわかる最新C言語の基本と仕組み の正誤表
http://www.shuwasystem.co.jp/books/7980/0283-6/0283-6.html

これを見る限り、根本的な誤りには気付いてなさそうだな。


676 :デフォルトの名無しさん:2006/02/12(日) 17:12:10
専門学校のバイト講師以外じゃねぇか

677 :デフォルトの名無しさん:2006/02/12(日) 17:12:47
横田が京都を中心に運営してるらしい会社(?)

http://www.f-site.com/

■代表者プロフィール

横田 一輝(よこた かずき)

1965年大阪府生まれ名古屋育ち
通産省情報処理試験対策の教員としてコンピュータ専門学校に勤務後、SEとしてメーカーの社内システム構築などに従事。
現在は関西フリーサイト代表として、大学,専門学校講師、パソコン関連本の執筆活動、システム開発など様々な分野で活動中。
・中高教員免許(社会)
・情報処理T種技術者


678 :デフォルトの名無しさん:2006/02/12(日) 17:18:07
旧I種ってFEの方か?あんなのプロフィールに書くほどの物じゃねーだろ

679 :デフォルトの名無しさん:2006/02/12(日) 17:18:27
>>663
サンプルってここにある奴か?
http://www.f-site.com/down.html

で、問題のサンプルはどの.lzhだ?


680 :デフォルトの名無しさん:2006/02/12(日) 17:21:55
>>678
旧I種別は今のSWに対応しているようだ。


681 :デフォルトの名無しさん:2006/02/12(日) 17:24:38
>>680
あぁFEは旧II種の方か
しかしこんな奴が取れるとはな

682 :デフォルトの名無しさん:2006/02/12(日) 17:28:31
>>679 char01.cのサンプルさらしとく


#include <stdio.h>//stdio.hファイルの宣言

int main()
{
char x;
char moji1='C';
char moji2='言';
char moji3='語';

x='a';
printf("変数xの中身は %c\n",x);

printf("変数moji1からmoji3を表示します %c",moji1);
printf("%c",moji2);
printf("%c",moji3);

}

683 :デフォルトの名無しさん:2006/02/12(日) 17:30:13
>>679から見つけた。char01.c。

#include <stdio.h>//stdio.hファイルの宣言

int main()
{
  char x;
  char moji1='C';
  char moji2='言';
  char moji3='語';

  x='a';
  printf("変数xの中身は %c\n",x);
  printf("変数moji1からmoji3を表示します %c",moji1);
  printf("%c",moji2);
  printf("%c",moji3);
}

ひでぶ!!


684 :デフォルトの名無しさん:2006/02/12(日) 17:55:50
ありえねぇ・・・
しかもreturnしてねぇし・・・

こんなヤツがよくI種取ったりSEやったりできたな・・・

685 :デフォルトの名無しさん:2006/02/12(日) 18:10:22
>>684
I種はC言語を知らなくても取れるし


686 :デフォルトの名無しさん:2006/02/12(日) 18:36:56
>>679の圧縮ファイルのホストOSが、MS-DOSになっているんだが……。

コンパイラはLSI-Cか……。
とても2002年に書かれた本とは思えない。

687 :デフォルトの名無しさん:2006/02/12(日) 18:40:29
ポインタと配列のことについて質問なのですが、C++で
void test(char hoge[128][256]){
 for(int i=0; hoge[i][0] != NULL; i++)
  //処理
}
の関数に、
char szStrs[128][256];
test(szStr)
とやっても参照渡しになるってのはわかるのですが、
引数をポインタにした場合の
void test(char **hoge)
{
 for(int i=0; hoge[i][0] != NULL ; i++)
  //処理
}
の関数に、szStrsを渡すにはどうやればいいんでしょうか?

688 :デフォルトの名無しさん:2006/02/12(日) 18:43:18
何回同じ質問を見たか・・・

689 :デフォルトの名無しさん:2006/02/12(日) 18:51:04
初心者歓迎って書いてたもので聞いてみたのですが、
何度同じ質問見たかしりませんが、この程度のことは答えるまでもなく、
実質初心者歓迎のスレではどうやらないみたいなので、
もうちょっとあれこれいじくってみます。

690 :デフォルトの名無しさん:2006/02/12(日) 18:52:22
質問です
構造体で
struct hito{
char name[20];
int nenrei;
};
hito human[2];
をファイルにテキスト形式で下記のように書き出したり読み込んだりしたいのですが
"namae1";15
"namae2";16
どのようにすればいいのでしょうか?
"と;を追加するのと、読み込みのときの識別の仕方がわかりません

691 :デフォルトの名無しさん:2006/02/12(日) 18:52:55
>>687,689
せめて、自分はどうやったらいいと思ったのか、
そしてやってみたらどんなエラーが出たのか、
これぐらいは用意してから質問してくれ。

692 :644です。:2006/02/12(日) 19:07:35
みなさんありがとうございました。
これからは、よく調べてから本を買います。
質問しなかったら、えらいことになってました。
ご迷惑かけてすいませんでした。

693 :デフォルトの名無しさん:2006/02/12(日) 19:19:25
>>687
根本的な勘違いをしている。
参照渡しにはならん。

char a ;
a ;//この型はchar

char ary[10]
ary[0] ; //この型はchar
ary ; //この型はchar *


char hoge[128][256] ;

hoge[0][0] ; //この型は、char
hoge[0] ; //じゃあ、この型は?

hoge ; //この型は?
&hoge ; //この型は?


694 :693:2006/02/12(日) 19:23:06
書き忘れてた。
&ary ; //この型は、char (*)[10]

695 :デフォルトの名無しさん:2006/02/12(日) 20:49:27
個別のメンバ関数の解説ってヘッダファイルに書くのが普通?
それともcppファイルに書くのが普通?

696 :デフォルトの名無しさん:2006/02/12(日) 20:51:45
ヘッダファイル

697 :デフォルトの名無しさん:2006/02/12(日) 21:43:39
>>687
何この関数

>>690
fprintfを調べてみろ
そこから先は自分で考えろ

698 :デフォルトの名無しさん:2006/02/12(日) 22:02:00
>>687
「二次元配列」と「1次元配列へのポインタの配列」の違いを考えろ

256x128要素の二次元配列は、32768個のデータが隙間なく並んでいる。

128要素の1次元配列への256要素のポインタ配列は、

・128個のデータが隙間なく詰まった配列が
・どこだか分からないけど合計で256個あって
・それぞれの配列の先頭アドレスが
・256個のポインタが隙間なく詰まった配列に記録されていて
・そのポインタ配列の先頭アドレスがchar** hogeとなる

ってこと。


699 :デフォルトの名無しさん:2006/02/12(日) 22:12:08
>>687
char *pszStars[128];
for( int i = 0 ; i < 128 ; ++i ){
  pszStars[i] = szStars[i];
}
test(pszStars);


700 :デフォルトの名無しさん:2006/02/12(日) 23:42:07
>>645
別にcharが16bit以上あるような環境があってもおかしくないが。


701 :デフォルトの名無しさん:2006/02/12(日) 23:53:12
>>700 入門書で断りも無く超環境依存ヤバス

702 :デフォルトの名無しさん:2006/02/12(日) 23:53:46
誰がbitの話してるよ?

703 :デフォルトの名無しさん:2006/02/12(日) 23:54:33
bitとbyteを混同すんなや

704 :690:2006/02/13(月) 00:17:17
>>697
ありがと、しかしわからなかったので
strtokとかいうの使ってできました。

手持ちの本どれにもこの関数は載ってなかった



705 :デフォルトの名無しさん:2006/02/13(月) 00:25:14
K&R C第2版でも買っとけというのは言い過ぎになってしまうのだろうか。

706 :デフォルトの名無しさん:2006/02/13(月) 00:49:23
そもそも1byte=8bitと決め付けること自体が間違い。

707 :デフォルトの名無しさん:2006/02/13(月) 00:54:13
そうだね。だから入門書でchar型に16bit入れたっていいよね。

708 :デフォルトの名無しさん:2006/02/13(月) 07:57:56
横田一輝ってすげーこのスレ向きの奴だな。

709 :デフォルトの名無しさん:2006/02/13(月) 08:15:04
実は C# だったり。

710 :デフォルトの名無しさん:2006/02/13(月) 08:21:17
訂正どうだすかな

711 :デフォルトの名無しさん:2006/02/13(月) 12:29:58
はじめて2chを使う者です。
既出だったりスレ違いだったら申し訳ありません。
初歩的なことだと思うのですが、
C++で、
class A{
B* b;
};
class B{
A* a;
};
みたいな事をしたい場合どうすればいいのでしょうか。
コンパイルするとB*って何?みたいなエラーが帰ってきてしまいます。

712 :デフォルトの名無しさん:2006/02/13(月) 12:32:12
>>711
class B;
class A{
B* b;
};
class B{
A* a;
};


713 :デフォルトの名無しさん:2006/02/13(月) 12:33:34
どうもありがとうございます

714 :デフォルトの名無しさん:2006/02/13(月) 12:39:15
>>711 激しく既出だが、やさしい人がいてよかったな。

715 :デフォルトの名無しさん:2006/02/13(月) 14:03:38
>>711
ただ、こういう構造になってしまうのは、設計でなにかがまずいんだ。
こういうの普通に考えてありえないでしょ?
他人のプログラムの改変とかで、こっちのが楽だっていうならいいが、
これが新規で作って出てきたクラスだとしたら、あまりにもセンスが無いw

716 :デフォルトの名無しさん:2006/02/13(月) 17:58:41
>715
んなこたーない

717 :デフォルトの名無しさん:2006/02/13(月) 18:24:12
>>716
そうだってw
こんなチグハグな設計になるわけないだろw
自分が馬鹿なの自慢しにくるなよw

718 :デフォルトの名無しさん:2006/02/13(月) 18:52:15
ケースバイケースって言葉しらないんだろうな
>>711のまんまならおかしいけど
色んな要素がある中で
そういう循環参照になるのは
ありがちだよ
そういうこともしないで
ムダな関数処理してるプログラマのがバカ


719 :仕様書無しさん:2006/02/13(月) 20:14:32
>>717
あんたが構造体やテンプレートのArrayやListで済むような単純なデータしか
扱っていないからだろ。

720 :デフォルトの名無しさん:2006/02/13(月) 21:34:37
>>719
それで済むようにできるのが俺のプログラムの上手さだと思ってる。
業界でもっとも複雑であろうゲームを作ってきた俺が必要なかったのに、
業務でアホなコード組んでるお前が複雑なデータなんて扱う必要があるわけない。
無理だというならそれがお前の限界。

721 :デフォルトの名無しさん:2006/02/13(月) 21:55:46
>>720
うむ。同意だが、ageてると説得力半減だ。

722 :デフォルトの名無しさん:2006/02/13(月) 22:10:07
2行目で笑いをとるためにageたに決まってるだろ。察してやれよ。

723 :デフォルトの名無しさん:2006/02/13(月) 23:22:42
語尾にwを多用するやつの説得力は通常の半分以下

724 :デフォルトの名無しさん:2006/02/13(月) 23:32:04
ハイハイw
そんな糞設計してて自分が正しいと思ってんのねw
オブジェクト指向は現実にある構成をそのままプログラムに反映できる設計よ。
この世にそんな構造のもんなんて存在しないでしょ?
自分が間違えてるのわかりそうなもんだけど。
まあ、馬鹿だからしょうがないかw
技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。
悲しいねぇw

725 :デフォルトの名無しさん:2006/02/13(月) 23:36:07
>>724
それはやりすぎだ。
誰も釣れないぞ。

726 :デフォルトの名無しさん:2006/02/13(月) 23:37:08
>>724
> この世にそんな構造のもんなんて存在しないでしょ?

世の中、人間の知っている事より知らない事の方が多いのに、
よく恥ずかしげも無くそんな事言えるね。

> 技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。

自己紹介乙

727 :デフォルトの名無しさん:2006/02/14(火) 00:03:10
>>726
はぁ?反論しようとするのはいいけど、自分の話をどう進めるかぐらいはできるようにしてくれよ。
てか、お前、俺のレスにどこに噛み付いて、どう否定したくて、自分はどう考えてるか?すら伝わってこねぇぞ。
頭悪すぎだろ。つか、日常生活で人とまともに会話できてる?

最近、>>726みたいなのって多くなったな。
なんか、宇宙人みたい。これがゆとり教育の弊害か?
張り切って釣りしようと思ってきたのに日本語しゃべれないんじゃしょうがない。さらば!
本読めよ!数学頑張れ!

728 :デフォルトの名無しさん:2006/02/14(火) 00:08:42
反論しようとしてないだろw
ただ煽ってるだけ見える。

729 :デフォルトの名無しさん:2006/02/14(火) 00:13:17
>>724は各センテンスのつながりがおかしいように思う。
プログラムもいいけど、たまには小説でも読もう。


730 :デフォルトの名無しさん:2006/02/14(火) 00:17:41
>>727
> 本読めよ!

オマエガナー

731 :デフォルトの名無しさん:2006/02/14(火) 00:18:26
読んでも無駄な希ガス

732 :デフォルトの名無しさん:2006/02/14(火) 00:30:41
>>727
よく、こんな狭い視野してPG出来るなぁ…。

733 :デフォルトの名無しさん:2006/02/14(火) 00:51:25
>>732に言われたら終わりだなw
PGとしてじゃなく人として。哀れ>>727www

734 :デフォルトの名無しさん:2006/02/14(火) 00:58:07
同じゲームプログラマとして恥ずかしいよ。

735 :デフォルトの名無しさん:2006/02/14(火) 02:38:38
ゲームプログラマはみんな恥ずかしいだろ。

736 :デフォルトの名無しさん:2006/02/14(火) 08:04:22
まぁなぁ。技術がありそうで無く、精神的に余裕に至っては皆無。
そんなヒビの入った歯車みたいな奴が多数だし。

737 :デフォルトの名無しさん:2006/02/14(火) 08:51:06
相互参照や循環参照くらい時々なら出てくると思うが。
まぁなんとかそれを解消させようとするんだけど、無理な場合も。
修論で知識ベースからの推論やってたときに、結構泣いた。

738 :デフォルトの名無しさん:2006/02/14(火) 10:17:59
自分ひとりで全部やるなら、そういう自信も持てるだろうが、
人が作ったものを利用しつつ、作ったものをまた人に利用させるような場合
そういいきれるものでは無いのだよ

739 :デフォルトの名無しさん:2006/02/14(火) 13:15:33
僕は君を知ってる。
君は僕を知ってる。
循環参照。

740 :デフォルトの名無しさん:2006/02/14(火) 13:20:42
だよな。
かたっぽだけだと、ストーカーだよな。

741 :デフォルトの名無しさん:2006/02/14(火) 13:21:19
リファレンスカウントされてるオブジェクトって、
「もう、ほっといてくれよ」とか
一瞬でも思ったりしないんだろうか。

742 :デフォルトの名無しさん:2006/02/14(火) 15:28:18
windowsアプリをつくっています。
タスクトレイにアイコンを表示して常駐するソフトを作成中です。
タスクトレイにアイコンは表示できたのですが、ウィンドウの透明化ができなくて
困っています。
ウィンドウの透明化はどのように行うのが一般的ですか?


743 :デフォルトの名無しさん:2006/02/14(火) 15:30:54
おれはCWnd::ShowWindow() つかってっけど

744 :742:2006/02/14(火) 15:36:15
>>743
レスありがとうございます。
もう少し詳しく教えてください!


745 :デフォルトの名無しさん:2006/02/14(火) 15:37:35
MSDNで調べろよ

746 :デフォルトの名無しさん:2006/02/14(火) 15:54:50
InitInstanceの中で、MainFrameが作成されたらそれに対して
ShowWindow(SW_HIDE)

と思ったら、自分のコードではそれに加えて
MainFrameのPreCreateの中で
cs.style &= ~WS_VISIBLE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);

こんなことやってるなあ、、、どれが効いてるんだっけ。

747 :デフォルトの名無しさん:2006/02/14(火) 15:55:06
とりあえず、>>743のCWndは忘れろ
ShowWindowだけ調べとけ

748 :742:2006/02/14(火) 16:02:31
みなさんありがとうございます。
ShowWindowの引数にSW_HIDEを入れたらできました。


749 :デフォルトの名無しさん:2006/02/15(水) 00:54:38
>>739
それはオブジェクトなのか?
そもそも、オブジェクト指向が理解できてないな。

あくまで「物」が主体なんだよ。

循環参照ができてしまうなんてのは未熟の証明でしかない。
そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?
物体Aの構成要素に物体Aがあるってことだぞ。
すでに破綻してる。
こんな脳みそでプログラムなんて組んだら破綻するのも当然。
オブジェクト指向をちゃんと勉強しろ。

750 :デフォルトの名無しさん:2006/02/15(水) 01:01:14
>>749
プ!

オブジェクトが物って誰が決めたんだよ。おまえの脳内理解のレベルが
その程度ってことだけは、よ〜く判ったよ。

751 :デフォルトの名無しさん:2006/02/15(水) 01:06:44
>>749 参照と包含ぐらい区別しようぜ。

752 :デフォルトの名無しさん:2006/02/15(水) 01:13:13
初心者なんですが、業務用ソフト等のプロテクト解除を教えてほしいのですが。



753 :デフォルトの名無しさん:2006/02/15(水) 01:14:39
>>752
ローカルルールより
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。

754 :デフォルトの名無しさん:2006/02/15(水) 01:16:15
>>750
お前こそわかってねぇな。
こうやって作れば絶対に破綻しないんだよ。

755 :デフォルトの名無しさん:2006/02/15(水) 01:17:05
現実にない構成をむりやり構築しようとするから複雑になってしまうのさ。

756 :デフォルトの名無しさん:2006/02/15(水) 01:52:08
>循環参照ができてしまうなんてのは未熟の証明でしかない。
>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?

AさんはBさんの電話番号を知ってる。BさんはAさんの電話番号を知ってる。
互いに相手に電話をかけてメッセージを送ったり何か仕事してもらったりできる。
たまに「おかけになった電話番号が使われておりません」ってことになるかも。


普通だな。

757 :デフォルトの名無しさん:2006/02/15(水) 01:55:36
>>756
ちがう。
そもそも電話番号なんてクラスになりえない。
オブジェクト指向でいえば電話番号なんて物じゃない。

クラスにしたとしても最適化のためだったり設計に結びつくようなものにはならない。

てめーはホントに頭悪いんだな。

758 :デフォルトの名無しさん:2006/02/15(水) 02:01:35
class ニワトリ
{
  class タマゴ* 自分が出てきたタマゴ;
};

class タマゴ
{
  class ニワトリ* 自分を産んだニワトリ;
};


759 :デフォルトの名無しさん:2006/02/15(水) 02:10:25
> 循環参照ができてしまうなんてのは未熟の証明でしかない。
> そもそも現実にそんな物体が存在するのか?
> この世にそんな物体が存在できるのか?

GNU is Not UNIX


760 :デフォルトの名無しさん:2006/02/15(水) 02:13:48
>>749
>物体Aの構成要素に物体Aがあるってことだぞ。

class ノード
{
  リンク* 右;
  リンク* 左;
};

class リンク
{
  ノード* 右;
  ノード* 左;
};


761 :デフォルトの名無しさん:2006/02/15(水) 02:16:24
>>757
お前さんは本当に頭が悪くていらっしゃる。

762 :デフォルトの名無しさん:2006/02/15(水) 02:17:13
>>759
それは循環参照じゃなくて無限再帰。

763 :デフォルトの名無しさん:2006/02/15(水) 02:46:08
ついでだからPHP Hypertext Preprocessorも置いておく

764 :デフォルトの名無しさん:2006/02/15(水) 03:57:38
変数のポインタに1を足したらその変数の型のサイズ分だけ進むそうですが
int *i; i++;

じゃ関数のポインタは?
int *(unko)(); unko++;
この場合int分進むの?ってことはこのintの部分は別にcharでもdoubleでも好きなの勝手に入れていいの?
それともunkoに指させる予定の関数の返り血の型にあわせとく必要があるの?もしそうならなんのため?ですか?

765 :デフォルトの名無しさん:2006/02/15(水) 03:58:52
ああ宣言しただけで値代入してないや。気にしないでください

766 :デフォルトの名無しさん:2006/02/15(水) 04:22:25
>>764
どうでもいいが、
int (*p)() だろ


もちろんそれは、変数の型( int (*)(void) )のサイズだけ進む。

具体的に言うと、
sizeof(p) == sizeof(int (*)(void)) == //処理系依存


MSVCなら、ポインタはすべて4バイト



767 :デフォルトの名無しさん:2006/02/15(水) 05:24:31
>>766
・char型が1バイト、int型が4バイトの処理系で
・0xaa 0xbb 0xcc 0xdd 0xee ・・・ってなってるint型を返す関数hogeがあるとして

char (*c)();
int (*i)();
c = hoge;
i = hoge;
c++;
i++;

これで c は0xbbを、i は0xeeを指すって理解でおkですか?


768 :デフォルトの名無しさん:2006/02/15(水) 06:42:00
>>758-767
はぁ?なんの話してんだ?お前等?
まともな思考回路脳みそにねーの?
プログラムなんて組むだけ無駄だから止めちまえ。

769 :デフォルトの名無しさん:2006/02/15(水) 06:46:48
>>764-765>>767
はオイラですがそれより上の人は知りませんよう

770 :デフォルトの名無しさん:2006/02/15(水) 08:02:45
>>768
反論できないけど黙ってるのも悔しいからとりあえず火病、
という追い込まれた状況はよく理解できたから、もう来なくてもいいですよ。

771 :デフォルトの名無しさん:2006/02/15(水) 08:44:04
PHP (PHP: Hypertext Preprocessor)を無限ループにせずに展開する方法をおしえてくだしあ

772 :デフォルトの名無しさん:2006/02/15(水) 09:24:51
>>757
>> AさんはBさんの電話番号を知ってる。BさんはAさんの電話番号を知ってる。
>> 互いに相手に電話をかけてメッセージを送ったり何か仕事してもらったりできる。
>> たまに「おかけになった電話番号が使われておりません」ってことになるかも。
>
> そもそも電話番号なんてクラスになりえない。
> オブジェクト指向でいえば電話番号なんて物じゃない。

確かに、電話番号のクラスはなり得ないかもしれない。
しかし、「Aさん」「Bさん」はオブジェクトだろ?
「Aさん」「Bさん」は現実に存在するものなのだから。
そして、「Aさん」「Bさん」はお互いの事を知っている、
と言う事は、現実にあり得る事だ。

773 :デフォルトの名無しさん:2006/02/15(水) 09:27:25
何かにたとえてる奴ってアフォなの?
どんな禁じ手だって、強引にたとえればいくらでもたとえられるだろw

774 :デフォルトの名無しさん:2006/02/15(水) 09:35:19
# 739 :デフォルトの名無しさん :2006/02/14(火) 13:15:33
# 僕は君を知ってる。
# 君は僕を知ってる。
# 循環参照。
#
# 749 :デフォルトの名無しさん :2006/02/15(水) 00:54:38
# >>739
# それはオブジェクトなのか?
# そもそも、オブジェクト指向が理解できてないな。
# あくまで「物」が主体なんだよ。

「君」や「僕」はオブジェクトだと思うが…。
そうか、>>749はこの世に存在しないのか!

775 :デフォルトの名無しさん:2006/02/15(水) 09:38:49
GUIで子ウィジットが親ウィジットのハンドル(もちろん逆も)を持つなんてのはよく見るケースだよ

776 :デフォルトの名無しさん:2006/02/15(水) 09:58:57
メタファによって理解が深まることはよくあることだよ。
あるいはメタファなしにはなにも理解できないと言っても過言ではない。
コンピュータ関連の用語はほとんどそれ以外の世界の言葉の借用であることからも
何と無く類推できよう。

777 :デフォルトの名無しさん:2006/02/15(水) 10:27:16
>>773
無能は例え話しかできないんだよ。語録不足だから。

778 :デフォルトの名無しさん:2006/02/15(水) 11:01:22
>>773
何か存在しないとか言い切ってる奴ってアフォなの?
どんな有用な構造だって、強引に否定すればいくらでも無視できるだろw

779 :デフォルトの名無しさん:2006/02/15(水) 11:01:58
日本語でおk

780 :デフォルトの名無しさん:2006/02/15(水) 11:55:41
どこで、質問して良いのか判らなかったので、こちらに失礼します。

現在、Visual C++ 6.0を用いて、あるアプリケーション用のプラグインを作成しています。
その際アプリケーション側のAPIから取得できる情報を、
RSS2.0、もしくはRDF形式で、保存する必要が発生しました。

そこで、質問です。
Visual C++6.0 でも使用可能な、RSSもしくはRDF形式のファイルを書き出せるクラスライブラリで、
フリーの物は、存在するのでしょうか?
ググッてみても、Readは沢山見当たるのですが、Writeが見当たりません。
やはり、自作するしかないのでしょうか?

ちなみに .Netや、2005には、アプリケーションのAPIが対応していないので、
移行できないのです・・・orz

よろしくおねがいします。

781 :デフォルトの名無しさん:2006/02/15(水) 12:00:03
>>780
Unmanagedな奴なら従来のとほとんど互換性有ると思うがそれでもダメなのか?

782 :デフォルトの名無しさん:2006/02/15(水) 12:11:10
XML DOMいじるライブラリなら C++ の物がいくつもあるから
それを使うっていうてもあるし、C++/CLI で .NET Framework
の中の類似のクラスを使うっていうてもある。

とはいえ俺も自分じゃ XML ほとんど使ってないから
口だけだけど。アプリの設定ファイルとかにXML つかってるけど
XML 読み書きできるシリアライザ呼び出してるだけだし。

783 :デフォルトの名無しさん:2006/02/15(水) 14:05:25
レスありがとうございます。

>>781
Unmanaged で一向に構いませんので、
参考書籍やURL等紹介していただけると、助かるのですが。


>>782
VC++6.0 から、.Net Framework って、使えるのでしょうか?
ご指摘の方法、もう少し調べてみます。

784 :デフォルトの名無しさん:2006/02/15(水) 14:56:33
>>783
>VC++6.0 から、.Net Framework って、使えるのでしょうか?

混乱させてしまったようで済みません。使えません。
VC++ 6.0 についているのは C++ コンパイラだからです。
VC++ 2005 についている C++/CLI コンパイラなら使えます。

785 :デフォルトの名無しさん:2006/02/15(水) 18:08:58
win2k vc++6.0という環境です。

書籍サンプルで、ソース中に「CoInitializeEx」を使用している、libを作るプロジェクトがあります。
これをそのままコンパイルした場合、普通に成功してlibができます。
しかし、このソースをwin32アプリを作るプロジェクトのなかにもってきてコンパイルすると
(もちろんwin32アプリとしての体裁を整えた上で)↓のようなエラーが出ます。

error C2065: 'CoInitializeEx' : undeclared identifier.

ググってみて↓のような文を付け加えたりしてみたらコンパイルできるようになったのですが、
libの場合とwin32アプリでコンパイルした場合でなぜ結果に違いが出るのか、理屈が分かりません。
どなたか教えてください。お願いします。

これとか。
#define _WIN32_WINNT 0x0400
#include <ole2.h>
これなど。
#define _WIN32_DCOM
#include <objbase.h>


786 :デフォルトの名無しさん:2006/02/15(水) 18:16:51
>>785
MSDN嫁

Windows NT/2000/XP: Requires Windows NT 4.0 or later.
Windows 95/98: Requires Windows 98 (or Windows 95 with DCOM).
Header: Declared in objbase.h.
Library: Use ole32.lib.

787 :デフォルトの名無しさん:2006/02/15(水) 19:01:11
>>786
つまりそのコンパイルするのにヘッダとかが必要なのは分かるのですが、
ではぜlibのプロジェクトでコンパイルする時には必要ないのか?
という理屈が分からないのです。

788 :デフォルトの名無しさん:2006/02/15(水) 19:05:45
つーかRSSの読み込みならともかく書き出しぐらい自分でやれよ。大した手間でもねーだろ。

789 :デフォルトの名無しさん:2006/02/15(水) 19:10:58
>>787
libのプロジェクトからwin32アプリに持っていった時に、
設定が変わっているからじゃないの?

790 :デフォルトの名無しさん:2006/02/15(水) 19:25:24
>>789
ども。リンクの設定かなとか思ったんですけど、
libのプロジェクトの方はそもそもリンクの設定するところがないみたいです。
ライブラリとかインクルードファイルの設定はプロジェクトが変わっても一定ですし。。
他にどこか設定する所ってのはおもいうかびませんです。すいません。

791 :デフォルトの名無しさん:2006/02/15(水) 19:28:36
>>774
はぁ?
「知っている」状態を表すのにどうしてオブジェクト自体を内包するの?
そもそも素質ねーんだよお前。

例えば、「俺」オブジェクトと「お前」オブジェクトがあったとして
「俺」が存在することで「お前」のプログラム自体に直接影響を与えちまうのはそもそもおかしい話なんじゃねーか?

こういう頭が無いってところですでにオブジェクト指向を理解できる見込みが全く無い。
さっさとプログラマなんて辞めちまえ。

792 :デフォルトの名無しさん:2006/02/15(水) 19:31:01
>>749
>あくまで「物」が主体なんだよ。 
>
>循環参照ができてしまうなんてのは未熟の証明でしかない。 
>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか? 

つまり、オブジェクト指向プログラミングでは
現実に存在する「もの」しかプログラミング対象に
ならない、と・・・

いやぁ。実に斬新な説だな。


793 :デフォルトの名無しさん:2006/02/15(水) 20:08:04
そもそも最初の話題はオブジェクトを内包じゃなくて互いのポインタをメンバとして持つだけの話だったよね。
>712辺り。

794 :デフォルトの名無しさん:2006/02/15(水) 20:10:45
>>791 内包するなんて言ってないじゃん。
参照って言ってるのに・・・・

795 :デフォルトの名無しさん:2006/02/15(水) 20:13:45
抽象概念なのに、現時世界に存在するものでしか考えられないのはナンセンスというか低レベル。

796 :デフォルトの名無しさん:2006/02/15(水) 20:14:02
StateパターンのContextとWindowって循環参照の関係にならないか?
あとはVisitorとか。


797 :デフォルトの名無しさん:2006/02/15(水) 20:16:59
一般に、オブジェクトのインターフェースと
実装方法の分離という理念を
しっかり体得出来ていない人が、

「参照を持っている->他のオブジェクトを包含する」

という安直な発想に陥りやすい。


798 :デフォルトの名無しさん:2006/02/15(水) 20:16:59
そういったデザパタでも、インタフェース継承等を使って、いるから直接的には
コード上は互いを参照しているようには見えない。
それをもって、「循環参照していない」と勘違いしている未熟者がいるのかもしれないけどな。


799 :デフォルトの名無しさん:2006/02/15(水) 20:38:06
>790
コンパイルエラーなんだろ? ならリンクは関係ない。
インクルード関係にどこか違いがあるはず。

800 :デフォルトの名無しさん:2006/02/15(水) 20:47:35
>>794
はぁ?ちゃんと読めよ。
俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
合わせてソースを書き換える必要があること自体おかしいって言ってんの。
ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。

そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
つまり、100X100の一万件分ソースを書くということか?
苦労だけ一丁前で全然金にならないなw

すっげ馬鹿が変に噛み付いてくる予防線として書いておくけど
ここでvoid*もしくはそれに近いものを使って、とっかえひっかえポインタ使いまわしても
(そもそもひとつのポインタを使いまわして複数のインスタンスを出し入れするなんて危険なことした時点でそいつはいらない)
俺は同じくそいつに「プログラマ辞めろ」という。

801 :デフォルトの名無しさん:2006/02/15(水) 20:50:53
>>800
>はぁ?ちゃんと読めよ。 
>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに 
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。 
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。 

いやぁ、いくら読んでも
やっぱり判らないや(w


802 :デフォルトの名無しさん:2006/02/15(水) 20:55:03
>>800
>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。

何でいちいちソース書き換える必要あるの?
双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。


803 :デフォルトの名無しさん:2006/02/15(水) 20:56:11
class A : protected B {

}

804 :デフォルトの名無しさん:2006/02/15(水) 21:00:26
どうでもいけど、C++だとオブジェクトじゃなくて、クラスかインスタンスって書いたほうがよくないか?
俺オブジェクトとお前オブジェクト云々ってのは、インスタンスじゃないよね?
クラスという意味でオブジェクトって言葉使っているのなら、ちょっとアレだ。

805 :デフォルトの名無しさん:2006/02/15(水) 21:03:53
class A : protected B {
   中略
};

protected で継承した B の public メソッドの一部だけ、
A の public メソッドとして外から見えるようにするには
どうすればいいですか?

同名のメソッドを作ってスルーするしかありませんか?

void A::foo() {
    B::foo();
}

みたいに。

806 :デフォルトの名無しさん:2006/02/15(水) 21:05:31
>>805
一部だけを見えるようにする言語仕様はありません。
書いているようにするのが一番単純な方法。

807 :デフォルトの名無しさん:2006/02/15(水) 21:07:44
>>800
>そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
>つまり、100X100の一万件分ソースを書くということか?
>苦労だけ一丁前で全然金にならないなw
C++にはtemplateがあるって知ってるかい?
templateを使えば「俺」に対するX、「お前」に対するYのコード、
つまり100*2のソースで十分だ。

事実STLは、データ構造の件数*アルゴリズムの件数の定義があるんじゃなくて、
templateを使い、データ構造の件数+アルゴリズムの件数しか定義せずに済ましている。

君のように阿呆みたいなコード量の爆発は起きない。

808 :デフォルトの名無しさん:2006/02/15(水) 21:11:00
>>806 そうですか、ありがとうございます。

たまに std::vector<T> を継承してちょっぴり
付加機能を付けたコンテナクラスを作ることがあるんですが、
使わないメソッドは隠蔽しておこうとして protected/private
継承すると、結局使いたい一部のメソッドも見えないよなぁ、
って悩んでました。

inline にしたらオーバーヘッドも少なそうだし、
あとはコンパイラの最適化を信じることにします。

809 :デフォルトの名無しさん:2006/02/15(水) 21:11:17
>>807
>君のように阿呆みたいなコード量の爆発は起きない。

STL はコンパイルすると、実質的なコード量が爆発するんだが・・・


810 :デフォルトの名無しさん:2006/02/15(水) 21:13:24
>>808
それは継承じゃなくて、集約にしたほうがいい。

811 :デフォルトの名無しさん:2006/02/15(水) 21:15:34
>>810 private なデータメンバとして
コンテナを保持しとけってことですか?

812 :デフォルトの名無しさん:2006/02/15(水) 21:17:33
>>805
struct A{void fn(){}};
class B:protected A{
public:
    using A::fn;
};

813 :デフォルトの名無しさん:2006/02/15(水) 21:20:18
>>812 げ、 using キーワードってそんなことにも使えたんですか。
using namespace OreNo::Kuukan;
しか使ったことなかった・・・

814 :デフォルトの名無しさん:2006/02/15(水) 21:33:36
正解は、非メンバ関数にすることだな

815 :デフォルトの名無しさん:2006/02/15(水) 21:35:07
std::vectorって継承して平気なんだっけ?

816 :デフォルトの名無しさん:2006/02/15(水) 21:37:15
http://www5.atwiki.jp/vc310ice/pages/4.html#id_3cddccf7

817 :デフォルトの名無しさん:2006/02/15(水) 21:40:35
>810
オブジェクト指向的?にはそうかもしれないけど、
それだと>812みたいに出来ないからなぁ。
まあインライン関数をずらずら並べるのとあまり違いはない気もするが。

>816
いやその理屈はおかしい。

818 :デフォルトの名無しさん:2006/02/15(水) 21:41:10
>>816
そんな事態を起こさないためのprotected/private継承。
クラス内だけ気を付ければよくなる。

819 :デフォルトの名無しさん:2006/02/15(水) 21:41:22
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200312/03120016.txt

820 :デフォルトの名無しさん:2006/02/15(水) 21:41:30
>>816
publicならともかく元の質問はprivate/protectedだろ?
基底クラスのポインタにそもそもキャストできんよ。
だから、その問題はこれとは関係ない。

まぁprotected継承しなくても集約で良いやん的な気分なのは俺もだが

821 :デフォルトの名無しさん:2006/02/15(水) 21:42:15
>仮想デストラクタのないクラスを継承してはいけない

そんな馬鹿な・・・
盲目的にそう信じるのは馬鹿だと思うぞ。
特にデータメンバに変更が無く、
便利なメソッドを追加するような継承では全く問題がない。


822 :デフォルトの名無しさん:2006/02/15(水) 21:44:07
データメンバに変更が無く→追加が無く

823 :デフォルトの名無しさん:2006/02/15(水) 21:45:18
プリミティブなメンバを増やすだけでもダメ?

824 :デフォルトの名無しさん:2006/02/15(水) 21:56:41
何書いてんのかと思ってたら・・・
>>821
ワロス
どうしてこういう無能がホームページなんか作っちゃうんだろうねぇ

825 :デフォルトの名無しさん:2006/02/15(水) 22:15:07
まあまあ、821は仮想関数というのを使ったことがないということで
許してやってくれ。

826 :デフォルトの名無しさん:2006/02/15(水) 22:17:25
双方向リストとかツリーとかあるじゃねーか。
これらが相互参照じゃなく自己参照だと言い張るのはかまわんが、

グラフとかもあるしな。

ジェネティックとかになるとどこがどうつながってるのかは
人には判断できねーよ。


827 :デフォルトの名無しさん:2006/02/15(水) 22:17:59
ログ更新してから書き込もうな。

828 :デフォルトの名無しさん:2006/02/15(水) 23:39:14
>>821
正確にはこう。

「publicな非仮想デストラクタを持つクラスから継承してはならない」

それ自体はインスタンスを作らない、派生クラスのための
Mix-inベースクラスとかは、protectedな非仮想デストラクタを持たせる。


829 :デフォルトの名無しさん:2006/02/16(木) 01:07:19
>>821-823
C++ FDIS 5.3.5/3 より引用。
"if the static type of the operand is different from its dynamic type, the static type shall be a base class of the operand's dynamic type and the static type shall have a virtual destructor or the behavior is undefined."

つまりデータメンバに追加が無くても、
デストラクタが virtual でない基底クラスへのポインタを
delete したとき、実際の型が基底クラスと違えば
問答無用で未定義動作。

問題が起こらない処理系が多いのが誤解の元だろう。

830 :デフォルトの名無しさん:2006/02/16(木) 01:12:17
>>816とそのURLの中の人と>>821が無能でFAだろ
いつまでもバカなネタ引っ張るなよ

831 :デフォルトの名無しさん:2006/02/16(木) 01:15:14
>>829
「問題の起こらない処理系」などない。
問題が起こる場面では、どんな処理系でも問題が起こる。

struct Base
{
  ~Base{}
};

struct Derived : public Base
{
  Derived() : Base(){
    1GBのメモリを確保;
  }
  ~Derived(){
    1GBのメモリを開放;
  }
};

Base* base = new Derived();
delete base;

どんな処理系でも、これで1GBのメモリリークが発生する。


832 :デフォルトの名無しさん:2006/02/16(木) 01:18:34
>>831
は?「問題が起こらない場面」があるから誤解の元になるんだろ?

833 :デフォルトの名無しさん:2006/02/16(木) 01:22:54
>>832
それは「問題はあるが実害が無い」場面が多いだけで
「デストラクタが実行されない」というバグは厳然として存在する。

お前みたいなバカがバグを量産してるんだな。


834 :デフォルトの名無しさん:2006/02/16(木) 01:25:45
>>833
ごめんよ。
君の頭の中で問題と実害が明確に区別されているなんて知らなかったんだ。

835 :デフォルトの名無しさん:2006/02/16(木) 02:09:45
ちょっと質問です。
もし、仕事でCを使うことになった時、どの程度までできれば役に立てますか?
また、GUIプログラミングもできないとやっぱりキツイんでしょうか・・・?

836 :デフォルトの名無しさん:2006/02/16(木) 02:21:33
>>835
それはCでなんの仕事をするかで、変わるものと思われます

837 :デフォルトの名無しさん:2006/02/16(木) 02:24:28
>831
>つまりデータメンバに追加が無くても、

838 :デフォルトの名無しさん:2006/02/16(木) 03:11:59
まあ、CRect は RECT を継承してるんだけどな。

839 :デフォルトの名無しさん:2006/02/16(木) 03:26:47
RECT* rect = new CRect;

...

delete rect;

とかやらんでしょ


840 :デフォルトの名無しさん:2006/02/16(木) 05:07:26
>>802
>何でいちいちソース書き換える必要あるの?
>双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。
はぁ?底無しの馬鹿だな。
基底が同じもんしか循環させないのか?

841 :デフォルトの名無しさん:2006/02/16(木) 05:10:01
>>807
お前はプログラマ辞めるどころか、もう死んじゃっていいと思うよw
テンプレートの話なんて誰もしてないよ。
だいたい、設計でテンプレートの話なんて出てくる時点で頭おかしい。

842 :デフォルトの名無しさん:2006/02/16(木) 05:53:38
みんな他人より自分が頭良いって思ってるんだなって事だけは
はっきりわかるスレですね。

うまいとか,うまくねえとか,他人(ひと)のやってるのをきいて,
そういうことを言うについちゃァ,別にモノサシがあるわけじゃァありませんが,
まァ,他人のはなしィきてみて,「こいつァ,オレよりまずいな」と思ったら,
まず自分と同じくらいの芸ですよ。人間にゃ誰だって,
多少のうぬぼれがありますからね。
「オレと同じくれえかな」と思うときは,向こうのほうがちょいと上で,
「こいつァ,オレより,たしかにうめえや」と感心した日にゃァ,
それゃァ,もう格段のひらきがあるもんですよ。


843 :デフォルトの名無しさん:2006/02/16(木) 06:04:17
>>842
技術で勝てないと知ると別の手段にでるところとか或る意味プログラマ向きだと思うよw

844 :デフォルトの名無しさん:2006/02/16(木) 06:37:38
>>842
おまいが某氏の blog に出入りしているところまで読んだ

845 :デフォルトの名無しさん:2006/02/16(木) 07:28:38
まぁどう考えてもこの中じゃ俺が一番頭良いな。

846 :デフォルトの名無しさん:2006/02/16(木) 09:47:01
オレが2番目だな

847 :デフォルトの名無しさん:2006/02/16(木) 09:55:54
じゃあ俺は4番目で良いよ。

848 :デフォルトの名無しさん:2006/02/16(木) 10:25:02
俺は最下位でいいよ。

849 :デフォルトの名無しさん:2006/02/16(木) 10:56:30
ラッキー! 俺3番


850 :デフォルトの名無しさん:2006/02/16(木) 11:47:05
このスレは5人しかいないのか

851 :デフォルトの名無しさん:2006/02/16(木) 12:06:30
遅レス失礼

>>788
おっしゃる通りでして、私も最初は自前クラスで書き出してしまおうと思ったのですが、
RSSのバージョン変化への対応等、将来のメンテナンス性や、拡張性等を鑑みて、
何らかの標準的な物が有るならば、それに乗っておいた方が良いかなと思い、調べていた次第です。

今回は、VC++6.0用に、自前でサックリと書き出しルーチンを作っておいて、
将来APIが、.NETなり、2005なりに対応した時点で、
置き換えられる様にコーディングするつもりです。

レスありがとうございました。>各位


852 :デフォルトの名無しさん:2006/02/16(木) 14:13:08
9×9の数独の問題を再起呼び出しを使って解くプログラムを作ってるんだけど、誰か指針をお願いします。

853 :デフォルトの名無しさん:2006/02/16(木) 14:15:45
http://pc8.2ch.net/test/read.cgi/tech/1139053955/953

854 :デフォルトの名無しさん:2006/02/16(木) 14:29:55
>>853
ありがとうございます

855 :デフォルトの名無しさん:2006/02/16(木) 16:38:01
>>852
その手のパズルは自分で解く事に意味がある。

856 :デフォルトの名無しさん:2006/02/16(木) 16:41:16
いやいや、パズルを手で解く楽しみとパズルを解くプログラムを作る楽しみは両立可能だよ?

まあプログラムに問題を解かす作業は特に楽しくないけどな。

857 :デフォルトの名無しさん:2006/02/16(木) 17:54:53
Visual Studio C++で質問です。
xは150
yは50
[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]
はどうしたら、表示されますか?

858 :デフォルトの名無しさん:2006/02/16(木) 18:13:47
>>857
puts("xは150\n"
"yは50\n"
"[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]\n");

859 :デフォルトの名無しさん:2006/02/16(木) 20:48:09
マネージ拡張のC++でwindowsプログラムを作ってるんですが、
#include <ddeml.h> とすると大量にエラー出て使えません。
どうしたら良いでしょうか。

860 :デフォルトの名無しさん:2006/02/16(木) 21:00:34
だからManaged C++はやめろと
C++/CLIの方がいいと思います

861 :デフォルトの名無しさん:2006/02/16(木) 21:05:29
>>859
ここはManagedのスレではありません

862 :デフォルトの名無しさん:2006/02/16(木) 21:35:43
unsigned short型の配列に入ってるデータを
そのままunsigned short型でファイルに出力するにはどうすればいいですか?
fwrite(配列名,sizeof(unsigned short),配列のサイズ,fpw);
↑こうやったら何か正しく出力されなかったんですが・・

863 :デフォルトの名無しさん:2006/02/16(木) 21:43:33
Windows には バイナリモードとテキストモードの区別がある

864 :デフォルトの名無しさん:2006/02/17(金) 00:22:52
初歩的な質問ですみません。
別ファイルでも使えるグローバル変数を作りたいんですが
方法を教えてください。

865 :デフォルトの名無しさん:2006/02/17(金) 00:24:35
>>864
extern


866 :デフォルトの名無しさん:2006/02/17(金) 00:27:59
ファイルローカルにして、アクセス関数で参照、変更させろ。

867 :864:2006/02/17(金) 01:05:21
>>865-866
早々とありがとうございます。

868 :デフォルトの名無しさん:2006/02/19(日) 13:13:03
Visual studio .netのコマンドプロンプトを起動して
メモ帳に書いたものを.cppになおしてからファイル名.exeってやってるのに
「内部コマンドまたは外部コマンド操作可能なプログラム
またはバッチファイルとして認識されていません」
ってでるんだけどなんで?
VSを普通に起動して手順通りに進めばできるんだけど
上のやり方で手軽にやる方法はどうしたらいいの?

869 :デフォルトの名無しさん:2006/02/19(日) 13:15:58
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|

870 :デフォルトの名無しさん:2006/02/19(日) 13:17:08
>>869に先に張られて(´・ω・`)

871 :デフォルトの名無しさん:2006/02/19(日) 19:16:59
これはひどい

872 :デフォルトの名無しさん:2006/02/19(日) 19:35:58
インターネッコですね

873 :デフォルトの名無しさん:2006/02/19(日) 20:54:38
Borland C++コンパイラとbccdevelopperの無料環境でメールチェッカーを作っています。
nMail.dllというDLLを使っているのですが、メイク時に
Error: 外部シンボル 'NMailInitializeWinSock' が未解決(C:\〜\CHECKIT.OBJ が参照)
Error: 外部シンボル 'NMailPop3Connect' が未解決(C:\〜\CHECKIT.OBJ が参照)
Error: 外部シンボル 'NMailPop3Authenticate' が未解決(C:\〜\CHECKIT.OBJ が参照)
Error: 外部シンボル 'NMailPop3Close' が未解決(C:\〜\CHECKIT.OBJ が参照)
Error: 外部シンボル 'NMailEndWinSock' が未解決(C:\〜\CHECKIT.OBJ が参照)

となってしまいます。nMail.hというヘッダファイルをプロジェクトに追加しているのですが…
リンクの仕方にどこか如何わしいところがあるのでしょうか?

874 :デフォルトの名無しさん:2006/02/19(日) 20:57:21
>>873
implib.exeでインポートライブラリ作ってリンクするかLoadLibrary&GetProcAddressしる

875 :デフォルトの名無しさん:2006/02/19(日) 21:01:47
インポートライブラリはついてこなかったの?

876 :デフォルトの名無しさん:2006/02/19(日) 21:40:38
>>874
ありがとうございます!libファイルをバッチで作るものがあるとは知りませんでした。

>>875
VisualCなどのlibはついてたのですが、それだとうまくメイクできなくて…。

作ったlibをメイク環境に追加したらできました。
ありがとう!

877 :デフォルトの名無しさん:2006/02/19(日) 23:45:42
実行ファイルの大きいアイコン(デスクトップなどに表示されるアイコン)は
どこで指定していますか?
WNDCLASSというhIconというところですか?

878 :デフォルトの名無しさん:2006/02/19(日) 23:59:37
>>877
というよりEXEファイルのリソース。
WNDCLASS::hIconはそのリソースを使うところ。

WNDCLASS::hIconの中身がEXEのアイコンになるのではなくて、
EXEのアイコンをWNDCLASS::hIconに指定している。

879 :877:2006/02/20(月) 00:45:38
>>878
では、exeのアイコンを替えればいいということでしょうか?
リソースで書けばいいんですよね?

880 :デフォルトの名無しさん:2006/02/20(月) 09:47:29
static な関数にも const 指定できればいいのに。

class A {
    static int i;
    static void Set(const int given_i)
        {i = given_i;}
    static void Get() const // この const 指定で怒られる
        {return i;}
};

コンパイラは Visual C++ 2005

881 :デフォルトの名無しさん:2006/02/20(月) 09:49:55
>>880
そのconstにどんな意味を持たせたいの?

882 :デフォルトの名無しさん:2006/02/20(月) 09:50:52
>>880
static ではないメンバ関数では this の型が A* から A const* になるわけだが、
this を持たない static 関数で、どんな効果を期待してるの?

883 :デフォルトの名無しさん:2006/02/20(月) 10:02:45
>>881-882
static なメンバ変数を変更しない事を明示したいです。
不用意にいじっってるコードがあれば指摘して欲しいです。


884 :デフォルトの名無しさん:2006/02/20(月) 10:23:00
無理

885 :デフォルトの名無しさん:2006/02/20(月) 10:33:15
>>883
Get() の中で Set() を呼び出した場合とか、
関数ポインタ &A::Get の型をどうするか?とか、
規格化するにあたって問題が多そう。

886 :デフォルトの名無しさん:2006/02/20(月) 10:33:50
>883
staticな部分をクラス化して、そのクラスのインスタンスをstaticメンバ変数にでもしたら?

887 :デフォルトの名無しさん:2006/02/20(月) 15:12:00
配列の初期化ってfor文でやるしかないですか?
たとえば、
char str[100];

//初期化
for (i=0; i<100; i++)
{
 str[i] = NULL;
}

というふうにです。100回もループを回すのはなんかもったいない気がして。

888 :デフォルトの名無しさん:2006/02/20(月) 15:16:59
>>887
char str[100] = {'\0'};
残りは自動的に '\0' が入る。

というか char に NULL 代入するなよ・・・・

889 :デフォルトの名無しさん:2006/02/20(月) 15:18:32
>>888
ありがとうございます!
charにNULL代入するのはおかしいですか?
\nは終了コードですよね?

890 :デフォルトの名無しさん:2006/02/20(月) 15:19:23
・・・・・

891 :デフォルトの名無しさん:2006/02/20(月) 15:24:46
改行(\n)したっていいじゃない
人間だもの

892 :デフォルトの名無しさん:2006/02/20(月) 15:30:17
あ、\0でしたすみません。
NULLと\0の違いがよく分かってないんです。
このあたりを書いてあるWEBページもあんまりないみたいで…。

893 :デフォルトの名無しさん:2006/02/20(月) 15:33:07
一番いいのは規格書を読む事なんだがな。
いい加減な本やサイトが多いし。

しかし個人で規格書を買うと高く付く。学校においてあるPDFを
閲覧するとかすればよい。

JISなら日本語でも読める。

894 :デフォルトの名無しさん:2006/02/20(月) 15:34:02
あ、間違ったごめん。JISの日本語版なら無料で誰でも閲覧できる。

(後はごにょごにょ

895 :デフォルトの名無しさん:2006/02/20(月) 15:35:05
やりたいことの意味が通じればよし。
で、やりたいことは
charの配列にヌルポインタを代入したいのか、0で初期化したいのかと言う話だ。

896 :デフォルトの名無しさん:2006/02/20(月) 15:43:15
ちょっと調べてみた

#ifdef __cplusplus
    #define NULL 0 ←C++の時
#else
    #define NULL ((void *)0) ←Cの時
#endif

あるじゃな〜い
NULLは ただのゼロ
\0は ヌル文字

\0は”改行コード”で調べるといっぱい出るぞ

897 :896:2006/02/20(月) 15:45:18
>\0は”改行コード”・・・
間違えたが反省しない

898 :デフォルトの名無しさん:2006/02/20(月) 15:58:16
ただのゼロだからといって、ゼロの代わりにNULLを書くのはバカ

899 :デフォルトの名無しさん:2006/02/20(月) 16:11:04
>893
K&R C第2版読め じゃダメなんかな

900 :デフォルトの名無しさん:2006/02/20(月) 16:15:00
>>896
NULLはヌルポインタ用。
C++ではvoid*型から他のポインタ型へ暗黙の変換ができないからそうなっているだけ。
ちなみに規格によるとNULLは「処理系定義の空ポインタ定数」となっている。

901 :デフォルトの名無しさん:2006/02/20(月) 16:39:41
ポインタであろうがなんであろうが 0 を入れておけばよさそうな…。


902 :896:2006/02/20(月) 16:56:19
一応、俺は887じゃないぜ

903 :デフォルトの名無しさん:2006/02/20(月) 18:20:18
>>887
必ずサイズの分かってる配列ならmemsetでもしてろ

>>896
で、おまいさんの調べたのはWindowsってオチだろ?
NULL = 0なのは代表的な処理系でそうなってるだけで、
NULL = 0とC++が規定してるわけじゃない

904 :デフォルトの名無しさん:2006/02/20(月) 18:28:20
>>892
> NULLと\0の違いがよく分かってないんです。

\0 → 文字定数or文字列定数中に整数値0を記述するためのエスケープ文字
NULL → 何のオブジェクトも指していない事を示す特別なポインタ値

905 :Windows xp home:2006/02/20(月) 18:39:34
Windows xp home
irvine1.1.2 のメニューとダイアログが文字化けします。
助けてください。お願いしますッ。

906 :デフォルトの名無しさん:2006/02/20(月) 18:43:18
>>903
>NULL = 0とC++が規定してるわけじゃない
4.10の1によると、null pointer constant(空ポインタ定数)とは0に評価される整定数式のことだから、
実質的に0だといえるんじゃないか?
#define NULL (1 - sizeof 'h')
みたいなのも許されると思うけど。

>>905
ソフトウェアについての質問はソフトウェア板でどうぞ。

907 :デフォルトの名無しさん:2006/02/20(月) 18:53:59
>>906
NULL==0は確かに全ての規格合致処理系において保証されてるが
その内部符号は未定義だからそこは分けておいた方がいいだろう

908 :デフォルトの名無しさん:2006/02/20(月) 20:14:02
>>906
それは、Cソース上で「0」がポインタとして解釈される時、
NULLとして扱われるという事だね。

# つまり、「if( NULL )」が偽となる


>>903が言いたいのは、実行時にNULLのビットパターンが、
「All bit 0であると言う保証はない」と言う事だろう。

909 :デフォルトの名無しさん:2006/02/20(月) 20:22:38
>>908
必要条件と十分条件が入れ替わってる希ガス

910 :デフォルトの名無しさん:2006/02/20(月) 22:52:42
いいかげんにしろおまえら。ずっと昔から答えが出てる話をだらだらと。
http://www.kouno.jp/home/c_faq/c5.html

911 :デフォルトの名無しさん:2006/02/20(月) 23:02:20
ぬるぽインター

912 :デフォルトの名無しさん:2006/02/21(火) 05:57:19
質問させてください。
よく、メッセンジャやスカイプで、新着通知に下からポップアップウィンドが上がってきますが、あれはどうやって実装しているのでしょうか?
まさか全部自作?

環境は、VC6.0のXPです。よろしくお願いします。

913 :デフォルトの名無しさん:2006/02/21(火) 07:11:54
自作以外に何があると?

914 :デフォルトの名無しさん:2006/02/21(火) 08:43:19
ヒント:ウィンドスタイル

915 :デフォルトの名無しさん:2006/02/21(火) 08:49:37
南南東の風、風力4

916 :デフォルトの名無しさん:2006/02/21(火) 08:50:26
南の風 風力3
っていう名前のラブホがあったよね。

917 :デフォルトの名無しさん:2006/02/21(火) 11:35:06
今は無いの?

918 :デフォルトの名無しさん:2006/02/21(火) 14:10:49
今もあるよ、チェーン店だし。

919 :デフォルトの名無しさん:2006/02/21(火) 15:22:08
基本クラスAから,クラスB,クラスC が派生しているとします.

クラスBに
vector<int> m_vHoge;
クラスCに
vector<double> m_vHoge;
がそれぞれメンバとして定義されているものとします.

このとき,基本クラスAに,m_vHoge に対して,
vector としての操作をするような関数を
定義するようなことはできますか?

できるならどのようにしたらいいのでしょうか?


920 :デフォルトの名無しさん:2006/02/21(火) 15:33:21
>>919
仮想関数かテンプレート


921 :919:2006/02/21(火) 15:53:51
>>920
すいません

愚かな私にいま少し具体的に示唆していただければ幸いです

922 :デフォルトの名無しさん:2006/02/21(火) 16:07:58
プログラムの勉強についての質問ですが、
柴田望洋のC言語 入門編を読んで勉強をしているのですが、
全てのリストを写して実行した方がいいのでしょうか。
演習だけやれば身に付くものなのでしょうか。
他の本にも言えることだと思うので、アドバイスお願いします。

923 :デフォルトの名無しさん:2006/02/21(火) 16:08:09
class A にその操作をするための関数のインターフェイスだけ書いておく。
もちろん vertual で =0 な純粋仮想関数として。
で、 class B と class C でその関数の中身をを実装する。
忘れないように class A のデストラクタも仮想デストラクタにしよう。



924 :デフォルトの名無しさん:2006/02/21(火) 16:08:56
>>922 コンパイル、リンク、実行
どんなサンプルでもやってみるのがいいよ。
その本に限らずに。

「わかる」と「できる」は違う。

925 :デフォルトの名無しさん:2006/02/21(火) 16:09:58
まあその本はあきらめて次を探すほうがいいけどなw

926 :デフォルトの名無しさん:2006/02/21(火) 16:14:19
>>924
そうですか。じゃあ頑張ってみます。
有り難うございました。

927 :919:2006/02/21(火) 16:29:16
>>923
ロジックがまったく同じで,
型だけが違う,という場合はどうしますか?

928 :デフォルトの名無しさん:2006/02/21(火) 16:38:54
>>927
vectorの要素の型だけ違っていればいい、というのであれば、テンプレートかな。

template <typename T>
class Hoge
{
  std::vector<T> m_vHoge ;
public:
  void func() ;//処理
} ;

template <typename T>
void foo( Hoge<T> &h)
{
  h.func() ;
}

int main()
{
  Hoge<int> hoge_int ;
  Hoge<double> hoge_double ;
  foo(hoge_int) ;
  foo(hoge_double) ;
}

929 :デフォルトの名無しさん:2006/02/21(火) 17:18:27
質問です。どなたかご教示いただければうれしいです。

例えば、

ifstream ifs;
ifs.exceptions(ios_base::failbit);

try {
ifs.open("fuga.dat");
}
catch(ios_base::failure){
cout << "dame jan!" << endl;
return(-1);
}

なんてして、open()の際のExceptionをキャッチしたいとします。

その後、上記が成功した場合は以下を実行しようとします。

char hoge[128];
while( ifs >> hoge)
cout << hoge << endl;

するとどうも、eofを取ってくれないらしく、ファイルの最終行
に達しているのにwhileから抜けず、実行中にアボートしてしまいます。
仕方無いので、上記のwhileループの前に
ifs.exceptions((_Ios_Iostate)0);

なんて入れたりしてexceptionを無効にするとOKになるのですが、
これは正しい手法でしょうか?


930 :デフォルトの名無しさん:2006/02/21(火) 23:44:59
>>929
それ、前に悩んだことがある。

operator>> の中で eof に達した場合、まず eofbit がセットされ、
入力が途切れることによって直後に failbit がセットされる。
つまり eof() && !fail() という状態を見ることが無い。

operator>>(istream&, char*) は1文字も入力できなかった場合に
failbit がセットされる。これはやっぱり eof に達したときに発生する。

なんでこんな仕様になってるのか理解できないが、たぶんどうしようもない。

> ifs.exceptions((_Ios_Iostate)0);
こんなキモイコード書くぐらいなら badbit だけ設定して、
is_open(), eof(), good() を明示的に書いたほうがいい。
どうせ入力のチェックは要るんだし。
入力では使えないが、 ostream には failbit も使えるだろう。

あと
- catch(ios_base::failure){
+ catch(ios::failure const&){
- ifs.exceptions((_Ios_Iostate)0);
+ ifs.exceptions(ios::iostate(0))

931 :デフォルトの名無しさん:2006/02/22(水) 00:33:59
char array[9];
unsigned int i;

i = 123;
sprintf(array,"%s%d\0","UserName",&i);

ってすれば、
array[0] →U
array[1] →s
array[2] →e

array[8] →123
array[9] →\0

になっていますか?


932 :デフォルトの名無しさん:2006/02/22(水) 00:39:12
>>931
なりません

933 :デフォルトの名無しさん:2006/02/22(水) 00:41:30
>>931
つーかやってみろよ

934 :931:2006/02/22(水) 00:48:34
>>932
&iじゃなくてiですか?

>>933
いまコンパイラが使えないところにいるので…。
カフェでCの宿題しています。

935 :デフォルトの名無しさん:2006/02/22(水) 00:49:40
ふざけてるのか?

936 :デフォルトの名無しさん:2006/02/22(水) 01:01:00
>>934
> カフェでCの宿題しています。
これ無理。

937 :デフォルトの名無しさん:2006/02/22(水) 01:59:38
Delphiで言うところのValueExist()のような関数が欲しくて悪戦苦闘しています。

GetPrivateProfileString("Test1","Test2","Default",str,100,buffer2))
としたとき、iniファイルにこれに該当するキーが無い場合にはこの関数は
"Default"を返すと思うのですが、
if (GetPrivateProfileString("Test1","Test2","Default",str,100,buffer2)) != "Default"){
}
とすると、"符号付き値と符号なし値の比較"といって怒られます。
GetPrivateProfileStringの第3引数はいったいどのようなものですか?


938 :デフォルトの名無しさん:2006/02/22(水) 04:22:17
>>937
ネタじゃないなら、文字列操作について勉強してきなさい。
引き数の問題ではなく、コンパイラの言う通り比較の仕方が問題なのだから。

939 :931:2006/02/22(水) 07:21:57
array[8] →123
とかどう見てもネタです、本当にありがとうございました

940 :デフォルトの名無しさん:2006/02/22(水) 08:46:13
>>937
何のための4番目、5番目の引数だと思ってるんだ。


#include<IniFiles.hpp>
TIniFile* ini = new TIniFile(buffer2);
if (ini->ReadString("Test1", "Test2", "Default") != "Default") {
  //
}

こうすればいいとおもうお(;^ω^)

941 :デフォルトの名無しさん:2006/02/22(水) 09:19:46
>>931
# 「&i」の値が「0x11111111」とした場合

array[0] → 'U'
array[1] → 's'
array[2] → 'e'

array[7] → 'e'
array[8] → '2'
array[9] → '8'
array[10] → '6'
array[11] → '3'
array[12] → '3'
array[13] → '1'
array[14] → '1'
array[15] → '5'
array[16] → '3'
array[17] → '\0'

942 :デフォルトの名無しさん:2006/02/22(水) 11:34:29
基本クラスで定義したテンプレート関数を
派生クラスの中で使ったら,
リンク時に

未解決の外部シンボル…

となるのですが,なぜでしょうか?

943 :デフォルトの名無しさん:2006/02/22(水) 11:36:22
>>942
テンプレートの実装はヘッダファイルに書かなきゃダメよ

944 :デフォルトの名無しさん:2006/02/22(水) 11:37:03
テンプレート関数の定義をソースファイルからヘッダファイル内に移しましょう

945 :デフォルトの名無しさん:2006/02/22(水) 11:38:10
>>943
結婚してくれ

946 :デフォルトの名無しさん:2006/02/23(木) 09:24:27
C++で,テンプレートかつ仮想関数というのはできますか?


947 :デフォルトの名無しさん:2006/02/23(木) 09:25:59
やってみればいいだろ

948 :デフォルトの名無しさん:2006/02/23(木) 09:38:08
C++のtemplateに関する質問です。

template <class T>
void hoge(T& n)
{
 T temp = 100; // 初期化可能?
 temp = 200; // 書き換え可能?
}

このような関数を作ったとして、

const int n = 100;
hoge(n);

とすると、T = const int となり、temp = 200;でコンパイルエラーになるのは納得がいくのですが、
template <class T>
void hoge(T n);
のように、値渡しとすると、コンパイルエラーが発生しません。
この挙動の違いに戸惑っております。
値渡しの際には、テンプレート仮引数のconst性は無視されると考えてよいのでしょうか?

949 :デフォルトの名無しさん:2006/02/23(木) 10:09:43
hoge<const int>(n);
ではなく
hoge<int>(n);
にマッチするようになってるから。

そうじゃないとhoge(100)とかもエラーになって困る。

950 :デフォルトの名無しさん:2006/02/23(木) 10:16:33
>948
コンパイラ何? VC.NET2003ではその通りになるけど
bcc5.5.1ではどっちもコンパイルエラーになる。

951 :デフォルトの名無しさん:2006/02/23(木) 10:24:26
レスありがとうございます。

>>949
なるほど、組み込み型の値渡しはconst性が無視される仕様である、ということで納得しました。

> そうじゃないとhoge(100)とかもエラーになって困る。
ここがいまいちよく分かっておりません…
(組み込み型の値渡しにconstは無意味である、という問題は無視して考えれば、)
100の型がintであろうがconst intであろうが、どちらでマッチしても問題ないように思えてしまいます。

>>950
VC.net 2005とgcc 3.4.4で確認しました。

952 :デフォルトの名無しさん:2006/02/23(木) 10:25:36
定数は const int

953 :デフォルトの名無しさん:2006/02/23(木) 10:29:34
>>952
申し訳ありません(;´Д`)
「100という定数値が、テンプレートでint、const intどちらでマッチしても、」の間違いです…

954 :デフォルトの名無しさん:2006/02/23(木) 15:20:07
値渡しはconst性が無視されるのか、とか、

値 渡 し っ て 何 か わ か っ て ま す か

955 :デフォルトの名無しさん:2006/02/23(木) 16:12:40
ええ、あなた程度でも知っているような事はさすがに理解しています^^;;;

956 :デフォルトの名無しさん:2006/02/23(木) 16:21:20
>>954
constが無意味なのはこの際無視するって書いてあるだろ
テンプレートパラメータの類推が引数部を参考に行われるのか、
呼び出し元の型に準拠するのかが知りたいだけだと思われ

957 :デフォルトの名無しさん:2006/02/23(木) 16:21:40
ふぁびょーん

958 :デフォルトの名無しさん:2006/02/23(木) 22:07:38
VBスレかここかで迷ったんですが、こっちに書きます。
VBでは扱えないハードウェアがありまして、CでDLLを作成して
そのDLLをVBで使うようにしたいんですが
普通のCとかで使うDLLと同じように書いても、VBで扱えるのでしょうか?
コールバック関数を登録したりしたいので、ポインタの受け渡しが必要になったりするのですが・・・・。
VBの事良く分からないので、的外れな事書いてるかも知れませんが、よろしくお願いします。

959 :デフォルトの名無しさん:2006/02/23(木) 22:17:03
MSNメッセンジャーの
タスクバーに出るポップアップウィンドウって、
どうやって出すんですか??

960 :デフォルトの名無しさん:2006/02/23(木) 22:22:16
>>958
VBというのがver.6以前のことか.net以降のことか分かりませんが、
どちらにせよ、可能です。

961 :デフォルトの名無しさん:2006/02/23(木) 22:25:17
VBで直接APIが呼べるということ(そのための宣言構文)から類推できそうなもんだけどな

962 :デフォルトの名無しさん:2006/02/23(木) 22:25:28
>>959
自前

963 :デフォルトの名無しさん:2006/02/23(木) 23:23:24
>>958
コールバックは無茶。

964 :デフォルトの名無しさん:2006/02/24(金) 00:01:24
>>963
AddressOfでDLLに渡せるんじゃなかったっけ?

965 :デフォルトの名無しさん:2006/02/24(金) 07:48:27
渡せりゃいいってもんでもない

966 :デフォルトの名無しさん:2006/02/24(金) 07:54:22
>>958
公開(エクスポート)する関数もコールバック関数も全てstdcallを使うこと。

967 :デフォルトの名無しさん:2006/02/24(金) 18:07:00
WinXPでCPU温度を読みたいのですが,
何から手をつければよいかわかりません.
ACPIを使うのだと思うのですが,
参考になるドキュメントなどあるでしょうか?

968 :デフォルトの名無しさん:2006/02/24(金) 18:27:45
ACPIでググって、日本語英語問わず片っ端から読む。

969 :デフォルトの名無しさん:2006/02/24(金) 20:14:31
何の助言にもなってないな

970 :デフォルトの名無しさん:2006/02/24(金) 20:17:52
ドキュメント渡しても絶対作れないに100%

971 :デフォルトの名無しさん:2006/02/24(金) 20:20:00
>>970にはなw

972 :デフォルトの名無しさん:2006/02/24(金) 20:26:05
>>967=>>969=>>971

973 :デフォルトの名無しさん:2006/02/25(土) 15:20:35
今回は凄く分かりやすかったな

974 :967:2006/02/25(土) 17:47:46
とりあえず
ttp://www.acpi.info/
このへんを読破しないといけないでしょうか?
DLLをロードして一発というわけにはいきませんか.

975 :デフォルトの名無しさん:2006/02/26(日) 16:11:55
>>974
http://www.misnet.co.jp/tech/download/opdown.htm
ここの使ったら?
ググったら一番上に来てた。

976 :デフォルトの名無しさん:2006/02/26(日) 17:16:08
1バイトと3バイトのデータがあり、この二つのデータを1つの4バイトの変数に入れるにはどうしたらいいですか?

977 :デフォルトの名無しさん:2006/02/26(日) 17:25:06
>>976
ビット演算

978 :デフォルトの名無しさん:2006/02/26(日) 17:26:53
>>976
struct

979 :デフォルトの名無しさん:2006/02/26(日) 17:30:36
>>977
シフトとかを使えばいいんですね

980 :デフォルトの名無しさん:2006/02/26(日) 18:22:33
>>976
unionとビットフィールド

981 :デフォルトの名無しさん:2006/02/26(日) 22:03:03
質問です。XP、2005 です。

フォントのビットデータを取得しようとしています。
以下のコードは、まずデータ取得に必要なサイズを調べているところですが、
GetGlyphOutline に失敗します。

 UINT uChar = 'a';

 GLYPHMETRICS gm;
 uChar &= 0x0000ffff;
 MAT2 mat = {{0,1}, {0,0}, {0,0}, {0,1}};

 // フォントを取得
 HDC hDC = CreateCompatibleDC(0);
 DWORD size = GetGlyphOutline(hDC, uChar, GGO_GRAY8_BITMAP, &gm, 0, NULL, &mat);
 if (size == GDI_ERROR)
  return false; // ここで失敗

GetGlyphOutline を呼び出す直前に各変数の値を調べてみましたが、特に異常な値は見当たりません。
にも関わらず、GetGlyphOutline がエラーを返してくれます。
何が原因か分からないでしょうか。
よろしくお願いします。


982 :デフォルトの名無しさん:2006/02/26(日) 22:06:35
教えて下さい。
C++Builder、VisualC++、VisualC#などがありますが、最も応用範囲が広いのはどれでしょうか?
ドライバ開発、アプリケーション開発、計測制御など、幅広く使える環境を探しています。

983 :デフォルトの名無しさん:2006/02/26(日) 22:09:46
C++Builder:開発元が売りに出しているC++開発環境
VisualC#:C++ではない言語の開発環境、ネイティブコードは得られない
何をしたいか知らんが、自ずと明らかかと


984 :デフォルトの名無しさん:2006/02/26(日) 22:13:24
馬鹿が釣れたw

985 :デフォルトの名無しさん:2006/02/26(日) 22:13:25
社会人とは思えない発言だな・・・

986 :デフォルトの名無しさん:2006/02/26(日) 22:16:22
>>982
Windowsを使うと言う前提では、最も範囲が広いのはVisual C++かと。

987 :デフォルトの名無しさん:2006/02/26(日) 22:18:10
自分にとって都合のいい条件をつけて回答する痛い>>986
妄想書き込んでんじゃねーよ

988 :デフォルトの名無しさん:2006/02/26(日) 22:19:54
ドライバ開発が前提になっている以上選択肢なんぞねーと思うが。

989 :デフォルトの名無しさん:2006/02/26(日) 22:21:36
>>988
ドライバはどれで作れますか?

990 :981:2006/02/26(日) 22:46:55
分からない・・・。
Win32API スレに行くべきでしょうか?


991 :デフォルトの名無しさん:2006/02/26(日) 22:51:07 ?
パワーポインターで作ったスライドってホームページに貼り付けられるの?

992 :デフォルトの名無しさん:2006/02/26(日) 22:51:30
>>990
それが正解

993 :981:2006/02/26(日) 22:54:51
API スレに行ってきます。ありがとうございました。

994 :982:2006/02/26(日) 23:00:33
早速の回答、有難う御座います。
当方の開発環境を書き忘れました申し訳ありません。
開発環境はWindowsです。

やはり、融通が効くという意味ではVC++という選択になるのでしょうか。
同じC++でも、BCBではどのような点が不利になるのでしょうか。
ご教示願います。

995 :982:2006/02/26(日) 23:03:58
調べたら詳しく書いてあるサイトを見つけました。
申し訳ありませんが、>>994は無かった事にしてください。

お手数お掛け致しました。

996 :982 ◆6vyQg.OGAA :2006/02/26(日) 23:10:46
この板は強制IDじゃないんですね。
995は私ではありませんので。

997 :982:2006/02/26(日) 23:13:51
>>996
何でそういう事をするのですか?
やめて頂けませんか?

998 :デフォルトの名無しさん:2006/02/26(日) 23:14:35
998

999 :デフォルトの名無しさん:2006/02/26(日) 23:15:29
999

1000 :デフォルトの名無しさん:2006/02/26(日) 23:17:08
次スレ
【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

244 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)