トップページ⇒tech
1001コメント306KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん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
0002デフォルトの名無しさん2005/12/29(木) 12:56:09
2げとー

>>3
m9(^Д^)プギャー
0003デフォルトの名無しさん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/
0004デフォルトの名無しさん2005/12/29(木) 13:58:30
どこでメモリリークしてるか検知したいときってどうする?
0005デフォルトの名無しさん2005/12/29(木) 13:59:32
>>1をまったく読まないの流行ってんの?
000652005/12/29(木) 14:00:52
誤爆スマソ
000762005/12/29(木) 14:01:42
誤爆スマソ
0008デフォルトの名無しさん2005/12/29(木) 14:06:08
>>4
そんな便利なものあるなら知りたい。
根性で探すしかないよ
0009デフォルトの名無しさん2005/12/29(木) 14:07:05
無いわけではない。
0010デフォルトの名無しさん2005/12/29(木) 14:09:25
>>4
(仕事などでそれが使えるなら)メモリリークを検出するツールを使う。
そうでないならメモリリークを起こしそうなところのコードを読み直すか、
メモリリークの状況を再現できるように維持しつつコードを削って絞り込むか、
アクセス回数を記録できるmalloc()/free()などのダミールーチンで追い込む。
0011デフォルトの名無しさん2005/12/29(木) 14:17:30
要は根性
0012デフォルトの名無しさん2005/12/29(木) 14:18:10
_CrtSetDbgFlag
0013デフォルトの名無しさん2005/12/29(木) 14:30:24
ツールはあっても結局最後は根性。
人間にしかリークと判定できないケースもままあるしね
0014デフォルトの名無しさん2005/12/29(木) 14:30:57
根性って・・・
0015デフォルトの名無しさん2005/12/29(木) 14:34:34
ツールでリーク全部取れると思ってるの?
0016デフォルトの名無しさん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ファイルを元に探し出すことが多いかな。
0017デフォルトの名無しさん2005/12/29(木) 14:41:12
単に開放し忘れなら簡単な部類。ツールでも上のやり方でも
見つけられる。厄介なのはそうじゃない場合。
0018デフォルトの名無しさん2005/12/29(木) 14:41:32
環境すら書かない奴は放っておく
0019デフォルトの名無しさん2005/12/29(木) 14:43:38
バイナリで提供された他人の作ったライブラリがリークってたり。
0020デフォルトの名無しさん2005/12/29(木) 14:44:47
環境云々ではなくリークの一般論でも話はできるな。
0021デフォルトの名無しさん2005/12/29(木) 14:46:35
>>17
開放わすれでないやつって
確保領域外のアクセス とか 解放後のポインタをそのまま使ってたり とかの部類?
0022デフォルトの名無しさん2005/12/29(木) 14:47:32
>>20
>>4が何を望んでるかわからんだろ?
汎用的な物なのか、環境依存の物なのか。
あれもこれも網羅するのは無駄すぎ。
0023デフォルトの名無しさん2005/12/29(木) 16:19:11
ひとつのネタなんだからいいんだよ。それで話を
膨らませて無駄話をするも一興
0024デフォルトの名無しさん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;とやらなければならないけどメモリリークにならない。

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

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





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

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

0028デフォルトの名無しさん2005/12/29(木) 18:41:23
>24
デストラクタがないオブジェクトは、要素の数を知る必要がないから
deleteもdelete[]も実装が一緒でも不思議ではない。
0029デフォルトの名無しさん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);
}
0030デフォルトの名無しさん2005/12/29(木) 19:12:59
ターミネート
0031デフォルトの名無しさん2005/12/29(木) 19:23:37
>>29
外部からsignal。
0032デフォルトの名無しさん2005/12/30(金) 10:38:41
WriteConsoleInput で何とかできないかな?
0033デフォルトの名無しさん2005/12/30(金) 12:12:50
(´ー`)おれにまかせろ
0034デフォルトの名無しさん2005/12/31(土) 10:43:33
mingwでコンパイルする時
Cファイルに関数を宣言してるだけでHファイルで宣言してないのに
他Cファイルからその関数を呼び出せてしまいます
ローカル関数として使いたいのですが…どうしたらよいでしょうか?
0035デフォルトの名無しさん2005/12/31(土) 10:45:18
>>34
関数をstaticにする
0036342005/12/31(土) 10:50:00
>>35
解決しました・・こんな簡単だとは
ありがとうございます
0037デフォルトの名無しさん2005/12/31(土) 13:23:02
で static の使い方を勘違いしたまま大人になるんだな
0038デフォルトの名無しさん2005/12/31(土) 15:08:08
別に、使い方合ってると思うが?
0039デフォルトの名無しさん2005/12/31(土) 17:19:02
質問です。XP、.NET です。

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

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

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

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

よろしくお願いします。


(続く)
0040392005/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;
0041デフォルトの名無しさん2005/12/31(土) 18:37:20
>>39-40
どっちかっていうとこっちではあるまいか?
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
0042デフォルトの名無しさん2005/12/31(土) 19:22:34
>>39-40
>>41のスレへ移動したうえで、ウィンドウプロシージャの中身も書け
0043デフォルトの名無しさん2006/01/01(日) 18:35:09
gccでグローバル変数が初期化されないんですけど…なんででしょうか?
0044デフォルトの名無しさん2006/01/01(日) 19:07:13
状況分からなさ杉。

どうせ別の変数で初期化しようとして、
変数の初期化順が不定なもんだから
変になってるだけだとは思うが。
0045デフォルトの名無しさん2006/01/01(日) 19:34:34
グローバルが初期化されない状況って言うと、
組み込み系か? ならそういうケースもあるよ。
0046デフォルトの名無しさん2006/01/01(日) 19:44:14
>>44
すいません、今度から関連するコードは出します。。
>>45
ズバリ組み込みです。有り得るケースなのですか。しょうがないので関数内で初期化します

ありがとー
0047デフォルトの名無しさん2006/01/01(日) 20:01:25
つーかグローバルなんて、mainの最初できっちり処理するもんだと思ってたんだが
0048デフォルトの名無しさん2006/01/01(日) 21:35:38
大域変数にしろ静的変数にしろ初期化する癖はつけておいたほうが良いと思うなあ
特に理由は無いけども
0049デフォルトの名無しさん2006/01/02(月) 10:49:00
しっかりしたOS上のC++じゃないなら、グローバルの初期化は
スタートアップがサポートしていない場合もある(ほとんどか)

組み込み系ならmain内で配置new使うのがお手軽だねえ
0050デフォルトの名無しさん2006/01/02(月) 13:42:54
新年とかかっているのか!
0051デフォルトの名無しさん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です)
0052デフォルトの名無しさん2006/01/02(月) 18:58:44
>>51
unicodeとか関係ねー

bが未初期化。
適当な配列を宣言してその先頭アドレスを代入するか、動的確保してください
0053デフォルトの名無しさん2006/01/02(月) 20:19:55
char *a="aiueo";
とかやってる時点でおわっとる
0054デフォルトの名無しさん2006/01/02(月) 21:38:13
>>53
別にそれ自体は問題ないがな
読み取り専用の文字列を作るのに普通に使うし
0055デフォルトの名無しさん2006/01/02(月) 22:18:40
>>53
何も問題ないが
0056デフォルトの名無しさん2006/01/02(月) 22:19:45
>>53の頭が問題なんじゃ・・・
0057デフォルトの名無しさん2006/01/02(月) 22:35:20
IEコンポーネントを使ってブラウザを作っているのですが、
JavaScriptの"Window.open()"とかで新しくウィンドウが開いたときに
IEが開いてしまって、それにセッションが引き継がれないようで、
SSL通信を行っている場合に正常に通信できなくなってしまいます。
何かいい対処方法は、無いでしょうか。
また、実装方法について参考になるサイトとかありましたら教えてください。
0058デフォルトの名無しさん2006/01/02(月) 22:35:31
>>54-56 const つけてください。お願いします。
0059デフォルトの名無しさん2006/01/02(月) 22:50:06
古いC時代の慣習を未だに引きずっているオールドタイプな>54-56がいるスレはここですか。
0060デフォルトの名無しさん2006/01/02(月) 23:14:23
いったい何人の>>54-56タイプがソフト会社に関わってるのやら・・・恐ろしい・・・
0061デフォルトの名無しさん2006/01/02(月) 23:16:09
どっちも、何がどう問題なのか指摘しないのが笑えるw
0062デフォルトの名無しさん2006/01/02(月) 23:31:44
>>58が見えんのか?
0063デフォルトの名無しさん2006/01/02(月) 23:39:26
多分constを付けなかった時の危険性を語れと言ってるのではないかと
0064デフォルトの名無しさん2006/01/03(火) 03:28:08
constを付けない危険性なんて変数名をaとかにするのに比べれば…
0065デフォルトの名無しさん2006/01/03(火) 03:29:06
別にこのぐらいのプログラムだったら大して問題ない
0066デフォルトの名無しさん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];
}
0067662006/01/03(火) 03:43:28
とか書きながら
char * const a = "aiueo";
これもありか。
0068デフォルトの名無しさん2006/01/03(火) 03:46:12
>>66
仕様的にどうこうってのはわからないけど。
確保していない(ように見える)メモリを書き換えるのが違和感を覚える。
なんかイヤだ。
0069デフォルトの名無しさん2006/01/03(火) 04:16:09
>66
鼻から悪(ry
0070デフォルトの名無しさん2006/01/03(火) 04:20:24
>>66
なんでXORでスワップできるのか分からん・・・
どこかに説明されてるページ無い?
0071デフォルトの名無しさん2006/01/03(火) 04:36:51
>>70
1 ビットで交換できるか試せばいいじゃん。
引き算でも似たことができる。
ただ、はっきり言って変数使った方がいい場合が多い。

>>66
文字列リテラルの書き換えは鼻から悪(ry
0072デフォルトの名無しさん2006/01/03(火) 04:57:54
>>71
いや、交換できるか否かは紙とペンで試したから分かってるんだが
原理が分からない・・・
0073デフォルトの名無しさん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

となる

これでわかるよな?
0074デフォルトの名無しさん2006/01/03(火) 05:19:22
>>72
aとbをXORして求められる値に、元のaかbのどちらかをXORすれば、もう片方の値になる
あとは自分で考えなされ
0075デフォルトの名無しさん2006/01/03(火) 05:20:46
>>73
理解した。�dクス
要は同じ奴でXOR×2すれば元のに戻るってのを利用してるわけだな


楽しいじゃまいか(*゚Д゚) ムホムホ 
0076デフォルトの名無しさん2006/01/03(火) 08:56:03
http://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
0077デフォルトの名無しさん2006/01/03(火) 08:59:12
>>73
それをVSでASM表示させてみたが、Temporary使うときよりコード増えてるな・・・
0078デフォルトの名無しさん2006/01/03(火) 15:38:05
>>77
読み出し演算書き込みやってんだから、abともにレジスタ
でもない限りはそう有利にもならないよ。
素直にテンポラリ使えってこった
0079デフォルトの名無しさん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も含めていいです)レベルで容易されていますでしょうか
0080デフォルトの名無しさん2006/01/03(火) 20:44:23
すみません誤植ありましたorz

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

正
0から"おはよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をおはよう\nの後ろに持ってきたいのです。
0081792006/01/03(火) 20:45:11
まだあった(´・ω・`)

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

正
レベルで用意されていますでしょうか
0082デフォルトの名無しさん2006/01/03(火) 22:30:10
>>79
ない。
やるとしたらいったんファイルの中身を全てメモリに読み込んで,
temp.txtに"おはよう"を書き出し,その後に続けて
読み込んでおいた元のファイルの内容を書き出していくことになる。
0083デフォルトの名無しさん2006/01/03(火) 23:14:37
>>82
やはりそっすかorz
0084デフォルトの名無しさん2006/01/04(水) 15:03:25
標準関数だけでは無理だね。
system("echo おはよう > foo ; cat temp.txt >> foo ; mv foo temp.txt");
とか。
0085デフォルトの名無しさん2006/01/04(水) 15:43:10
あらかじめ余分な空間を取っておけばそこに書き込めばいいわけだけど、
この手が使える状況ってのは限られてるね。
0086sage2006/01/04(水) 20:27:55
void test()
{
 string s1;
 string s2;
}

すいません質問です。この関数を抜ける時、
s2, s1 の順でローカル変数が開放される事は
保証されているのでしょうか?
0087デフォルトの名無しさん2006/01/04(水) 20:30:49
>>86
局所変数の開放順は保証されてなかった気がする
0088デフォルトの名無しさん2006/01/04(水) 20:34:21
>>87
そすか、気がするで十分です
どうも助かりました
0089デフォルトの名無しさん2006/01/04(水) 21:00:05
保証されてるだろ?
大域変数はダメだけど。
0090デフォルトの名無しさん2006/01/04(水) 21:06:54
コンストラクタが実行された逆順でデストラクタが実行されるんじゃなかったっけ?
0091デフォルトの名無しさん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.
0092862006/01/04(水) 21:58:03
>>91
お、お手数かけます
すこぶる確実ならそれに依存したコードをちと書きたかったもので。
ちとソースなり探してみます
0093デフォルトの名無しさん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の順は言語的には保証されてない(処理系依存)。
0094デフォルトの名無しさん2006/01/04(水) 23:28:18
>>93
>>91
0095デフォルトの名無しさん2006/01/04(水) 23:29:35
>>93
string s1;
foo();
string s2;

の場合はどうよ?

で、

string s1;
string s2;

の場合は?
0096デフォルトの名無しさん2006/01/05(木) 00:07:36
boost::mutex
とかはこの挙動を前提にしていると思うんだけど
0097デフォルトの名無しさん2006/01/05(木) 06:31:51
そんな開放順なんて気にするプログラム書いてる時点で素質無し。
逝って良し。
0098デフォルトの名無しさん2006/01/05(木) 06:32:50
int p = new int[0];
ってどうなりますか?
0099デフォルトの名無しさん2006/01/05(木) 07:01:50
>>98
コンパイルエラー
0100982006/01/05(木) 07:15:27
じゃあ
p = new int[t];
でt=0のときはどうなりますか?
0101デフォルトの名無しさん2006/01/05(木) 07:42:19
コンパイルエラー
0102デフォルトの名無しさん2006/01/05(木) 07:42:58
つーか、tなんぞ関係なくコンパイルエラー
0103982006/01/05(木) 08:09:56
あの、すみません、間違えました・・・
int *p = new int[t];
でした
0104デフォルトの名無しさん2006/01/05(木) 09:02:28
sizeof(int) × ( t + 1 )の領域が確保される
0105デフォルトの名無しさん2006/01/05(木) 09:15:09
>>103
こらこら嘘を書くな。
0106982006/01/05(木) 10:42:58
で、あの、
int *p = new int[t];
t=0のときはどうなるんでしょうか・・・
*pは不定値?NULL?それとも確保されない?
0107デフォルトの名無しさん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. ]
01081072006/01/05(木) 10:55:05
あ、後半は規格(FDIS)から 5.3.4.7 の引用ね。
0109982006/01/05(木) 11:05:00
>>107
ありがとうございます。つまり0になっては都合が悪いということですね
0110デフォルトの名無しさん2006/01/05(木) 11:15:24
>>109
ちがうよバカ。

都合が悪いかどうかはプログラムによって決まること。
0111982006/01/05(木) 11:22:27
都合の悪くない使い方の例を教えていただけませんか?
0112デフォルトの名無しさん2006/01/05(木) 11:27:17
>>111
都合の悪い使い方の例を教えていただけませんか?
0113982006/01/05(木) 11:29:35
>>112
*p の値を参照すると都合が悪いんですよね?
0114デフォルトの名無しさん2006/01/05(木) 11:30:55
>>113
要素数 0 なのに要素を参照するのはプログラムが間違ってると思わないか?
0115982006/01/05(木) 11:33:12
つまりすべての場合で都合が悪いということですよね?
0116デフォルトの名無しさん2006/01/05(木) 11:42:58
>>115
ちがうよバカ。

正しいプログラムでは問題にならない。
0117982006/01/05(木) 11:44:42
では重ね重ねすみませんが要素数0のpの使い道を教えていただけませんか?
0118デフォルトの名無しさん2006/01/05(木) 11:51:41
>>117
ヌルではないから、配列が確保されたかどうかの判別には使える。
他のポインタと違う値になるから、 std::map など連想配列のキーにも使える。
0119982006/01/05(木) 11:56:59
なるほど・・・そのような使い道があったのですね。参考になりました
0120デフォルトの名無しさん2006/01/05(木) 12:08:33
「使い道がわからない=都合が悪い」もしくは
「都合が悪くない=使い道がある」とかいう思考回路もなんとかしとけよバカ。
0121982006/01/05(木) 12:18:01
思考回路というより、言い方が不味かったですすみません
0122デフォルトの名無しさん2006/01/05(木) 12:43:47
>>121
思考回路も十分まずいよ、君の場合。
0123デフォルトの名無しさん2006/01/05(木) 14:32:53
C++で、"オブジェクトをファイルに保存して、また後でそのオブジェクトを使う"
というのはできますか?? ポインタをください。
環境は Debian で、gcc のバージョンは、3.3.5です。
オブジェクトの中身をStringにおとして、テキストでファイルに書き込んで、
それをまたよみこんで、オブジェクトを初期化するのは、どんくさいように思いました。
0124デフォルトの名無しさん2006/01/05(木) 14:40:22
うん、どんくさい。おまいがな。
0125デフォルトの名無しさん2006/01/05(木) 14:57:12
>>123
できない。というか、言語側では面倒を見てくれない。
C、C++は自分で全部やるか他の人が作ったライブラリを
使うかしかない。
ちなみに、インスタンスの構造はメンバだけじゃないから、
オブジェクトをべたで書き出して後で読み込んだら
吹っ飛ぶかもしれないよ(仮想関数テーブルへのポインタとかね)
0126デフォルトの名無しさん2006/01/05(木) 15:58:41
>>123
boost:serialization
0127デフォルトの名無しさん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はここ数日に導入したもので基本操作が身についていないため導入できなかったのかも
しれませんが、どうしてもやり方が分からず途方にくれています。
0128デフォルトの名無しさん2006/01/05(木) 16:16:10
>>127
鼬害。
0129デフォルトの名無しさん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
0130デフォルトの名無しさん2006/01/05(木) 17:04:55
>>129
解答ありがとうございます。
ただ、
./gccx sample.cc
と言うように入力したところ、
bash: ./gccx: 許可がありません

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

また、
>リンク先はオールドタイプだな
>あんまり勧めたくないところだけど
とありますが、お薦めがあれば教えてもらえると嬉しいです。
0131デフォルトの名無しさん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でも読んで
まず基本的なことを身に着けた方が良いよ
0132デフォルトの名無しさん2006/01/05(木) 17:14:45
>>130
gccxなどのファイルパーミッションはちゃんと実行許可を立てていますか?
つーか、鼬害なのでとっとと犬板か海胆板にお帰りください。
0133デフォルトの名無しさん2006/01/05(木) 17:41:39
Cです。連番のファイルを処理したいとき、(例えば01.dat 02.dat...)
forループで処理するとしてfopenでファイル名で
どのようにループの変数を設定すればよいのでしょうか?
0134デフォルトの名無しさん2006/01/05(木) 17:47:30
sprintf
0135デフォルトの名無しさん2006/01/05(木) 18:05:27
>131
>132
解答ありがとうございました。
確かに、
.bashrcに

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

XINCDIR: 定義されていない変数です。
と応答されまたもコンパイル不能でした。
基本操作だそうなので追加の解答は期待せず調べてみますね。
0136デフォルトの名無しさん2006/01/05(木) 18:19:54
>>135
typoごめんね

>XINCDIR: 定義されていない変数です。
$ export
とうつと今設定されている環境変数が表示されます
XINCDIRは設定されてる?
0137デフォルトの名無しさん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など)を入力すると入力メッセージ
が無限ループしてしまいます。
英字を入れたときも正常に再入力
にするにはどうすればいいですか?
0138デフォルトの名無しさん2006/01/05(木) 18:23:54
環境はVisual C++です。
よろしくお願いします。
0139デフォルトの名無しさん2006/01/05(木) 18:24:13
>>136
あんまり甘やかすなや。

>>137
scanf()を使うのを諦め、fgets()とsscanf()を組み合わせて使う。
実例は、このスレか過去スレ、或いは宿題スレで見つかると思う。
0140デフォルトの名無しさん2006/01/05(木) 18:30:54
>>139
ありがとうございましたm(__)m
なんとかなりそうです。
0141デフォルトの名無しさん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らとともに作業フォルダに保存してあります。

あまりに初歩的な質問でお手数お掛けして申し訳ありません。
0142デフォルトの名無しさん2006/01/05(木) 19:51:51
はじめまして。
C++を始めようと思うんですが、C++.netってコンパイルされた後の
コードが機械語じゃなく、半分翻訳された中間体のような物だとと聞きました。
過去のOSなどで使えるソフトが作れるような、機械語コードを吐き出す
C++は現在売られているのでしょうか?
よろしくお願いします。
0143デフォルトの名無しさん2006/01/05(木) 19:55:00
もんだいない。ネイティブC++は健在
0144デフォルトの名無しさん2006/01/05(木) 19:56:10
>>142
現在の主流の処理系は機械語を生成する。たぶんおまえが言ってるC++.netはmanaged C++のこと。
0145デフォルトの名無しさん2006/01/05(木) 19:56:18
売られてる最新のVC++.NET使ってるけど出力されるのは普通の機械語ですが何か?
0146デフォルトの名無しさん2006/01/05(木) 19:56:55
windowsxpなんですが、コマンドプロンプトでプログラム*.cを実行しようとすると
'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示されます。
どうしたら実行できるようになるんですか?
0147デフォルトの名無しさん2006/01/05(木) 19:57:36
まぁ、VisualC++.NETとかって売られてる本でも、Managedとか断りも無く、普通に.NET Frameworkで書いてあるだろうけどな
0148デフォルトの名無しさん2006/01/05(木) 19:57:41
冬休みだなぁ・・
0149デフォルトの名無しさん2006/01/05(木) 19:58:15
>>146
まずはPCを窓から投げ捨てろ
話はそれからだ
0150デフォルトの名無しさん2006/01/05(木) 19:58:31
>>146
GCCはインストールした?
したなら、環境変数PATHの値にgcc.exeのパスが含まれてる?
0151デフォルトの名無しさん2006/01/05(木) 19:59:24
*.cは実行できません。実行できるのは*.exeとか
0152デフォルトの名無しさん2006/01/05(木) 20:01:29
>>147
そーか? VC++.NET本ってネイティブが主のが多いんじゃね。
おれの立ち読み感からするとだが
01531462006/01/05(木) 20:02:15
すいません。gccインストールしてません。
いつもは学校でlinuxのターミナルでやってるので家のものは使い勝手が違いよくわかってないんですが、
他のやり方で作ったプログラムが機能してるかどうかテストできる方法ありませんか?
0154デフォルトの名無しさん2006/01/05(木) 20:03:18
gcc入れたら?
0155デフォルトの名無しさん2006/01/05(木) 20:04:08
>>153
WindowsでGCCを使うにはインストールが必要。
Mingwあたりを調べれ。
0156デフォルトの名無しさん2006/01/05(木) 20:04:13
そんなくらい自分で調べろや・・・
0157デフォルトの名無しさん2006/01/05(木) 20:04:23
学校いけよ
0158デフォルトの名無しさん2006/01/05(木) 20:04:50
大学生・・・だよなぁ?
01591462006/01/05(木) 20:05:11
失礼しました。一通りググってからもう一回来ます。
0160デフォルトの名無しさん2006/01/05(木) 20:07:40
>>143>>144>>145>>147
C++.netを買ってプログラミングしてみます。
有難うございました。
0161デフォルトの名無しさん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に失敗してしまいます。
どこがわるいのでしょうか?
0162デフォルトの名無しさん2006/01/05(木) 20:11:17
自己解決しました。
0163デフォルトの名無しさん2006/01/05(木) 20:11:22
ファイルが無いんじゃないの?
0164デフォルトの名無しさん2006/01/05(木) 20:12:25
こんないちいち聞かないと進められないくらいなら、プログラムなんかやめちまえ。
01651612006/01/05(木) 20:26:39
ファイルはちゃんと同じフォルダにあります
もうちょっとしらべてみますね
0166デフォルトの名無しさん2006/01/05(木) 20:28:20
自己解決したんじゃないのか?
0167161 ◆54OuYX6VME 2006/01/05(木) 20:37:45
162は私ではないです
一応とりつけときます
0168デフォルトの名無しさん2006/01/06(金) 00:45:32
ちゃんとclose()してる?
0169デフォルトの名無しさん2006/01/06(金) 03:09:12
>>161
エラー出力を perror("Can't open file!"); に変えてみよう。
0170デフォルトの名無しさん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){}
};

のように書いても、リンク時に外部シンボルが参照できないという
エラーが出てしまいます。
どう書けば、基底クラスのインターフェイスだけで、
派生クラスごとのオペレータを呼び出せるのでしょうか…。
0171デフォルトの名無しさん2006/01/06(金) 15:10:58
LinuxでSIGSEGVやSIGFPEを無視する(あるいはエラー処理をしてプログラムを続行する)にはどうすればよいのでしょうか?
シグナルを無視すると無限ループになるし。。。
0172デフォルトの名無しさん2006/01/06(金) 16:04:07
>>171
こっちの方が良いかも
http://pc8.2ch.net/test/read.cgi/tech/1127373405/
01731712006/01/06(金) 16:33:10
>>172
わかりました。そちらで質問しなおします。ありがとうございました。
0174デフォルトの名無しさん2006/01/06(金) 20:22:32
>170
何をしたいのかよく解らん。
オペレータって何だ?関数のことか?
0175デフォルトの名無しさん2006/01/06(金) 20:38:09
つーか、派生とテンプレートを混乱している悪寒。
0176161 ◆54OuYX6VME 2006/01/06(金) 21:43:18
変数zをグローバルでdouble型にしていたのが問題だったようです。
皆さんどうもありがとうございました
0177デフォルトの名無しさん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;
};

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

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

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

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

>>177
ありがとうございます。
そういうテンプレートの使い方があったんですね。勉強になります。
0180デフォルトの名無しさん2006/01/07(土) 05:28:37
>>179
いい勉強になったな。ではComeau C++でも(ry
0181デフォルトの名無しさん2006/01/07(土) 05:42:47
export 実装処理系キタ━━━━(゚∀゚)━━━━!!
0182デフォルトの名無しさん2006/01/08(日) 22:06:21
つか、ギコナビでこのスレみつかんなくなったage
0183デフォルトの名無しさん2006/01/08(日) 22:21:48
アホか
0184デフォルトの名無しさん2006/01/08(日) 22:25:04
>>183
アホつった奴がアホなんだ。アホ。
0185デフォルトの名無しさん2006/01/08(日) 22:33:50
>>184
0186デフォルトの名無しさん2006/01/09(月) 01:22:10
今どきC++な僕らがアホなんだ。アホ。
0187デフォルトの名無しさん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'); }
};
0188デフォルトの名無しさん2006/01/09(月) 12:55:19
なぜ試さない・・・
0189デフォルトの名無しさん2006/01/09(月) 12:57:13
>>187
コンストラクタから呼び出すコンストラクタは、一時オブジェクトになる。
つまり、それに操作を施しても結果が残らない。
0190デフォルトの名無しさん2006/01/09(月) 13:15:42
>>188
色々試してダメだったのよ
Foo() : Foo(0, '\0') {} もできなかった

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

>>188-189
ありがとうございました。
0191デフォルトの名無しさん2006/01/09(月) 13:24:04
例ならデフォルト引数で良さそうにも見えるけど… だめなん?

class Foo { public: Foo(int i=0, char c='\0'); };
0192デフォルトの名無しさん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); }
};
なので、コンストラクタとは別に実コンストラクタを持つ方がいいかなぁと。
0193デフォルトの名無しさん2006/01/09(月) 14:09:52
>>192
そういうのだと、分離したほうがすっきりしそうだね。
ついでに実デストラクタ(?) もセットにしておけば、スマートに見える(かも)
0194デフォルトの名無しさん2006/01/09(月) 16:08:34
VC6.0でプログラムしてるんですが
プロジェクトフォルダ以外にインクルードファイルだけまとめたフォルダがあるんですが
参照したいインクルードファイルのフォルダの追加ってどこで設定できるんですか?
とりあえずプロジェクトの設定だいあろぐを出して色々みてるんですが
どこにあるかわかりません
0195デフォルトの名無しさん2006/01/09(月) 16:14:05
オプション(O)画面も出せない君はスレ違い
0196デフォルトの名無しさん2006/01/09(月) 16:19:36
スレ違いでしたようでどうもすいません。
おかげさまで解決しました。ありがとうございます。
0197デフォルトの名無しさん2006/01/09(月) 16:40:47
お前ら最高に素敵だ!
0198デフォルトの名無しさん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;

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


0199デフォルトの名無しさん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");
0200デフォルトの名無しさん2006/01/09(月) 17:02:57
>>198
どんなところに石が置けるのか、挟むとはどんなことなのかを日本語で書き出せ。
そしてそれをCで表現するにはどうしたらいいか考えろ。
0201続き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;
0202続き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();
}
02031982006/01/09(月) 17:10:58
>>200さん
ぼくなりに考えたのですが

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

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

こんな感じだと思うんですがどうしてもC言語で表現する方法が思い浮かびません><
0204デフォルトの名無しさん2006/01/09(月) 17:26:28
だめだな
思いつかないならまだ早いと言うことだ
02051982006/01/09(月) 17:33:29
そんなぁ><
まだ独学ではじめて1ヶ月くらいなんです。。。
先生がいないから教えてほしいのです><
0206デフォルトの名無しさん2006/01/09(月) 17:39:09
>石を置いた時に、隣を見て自分と反対の色の石があり、
まずはここから。これができたら、隣りの隣りを見て、隣りの隣りの隣りを見て...まぁがんばれやと。
02071982006/01/09(月) 17:45:50
>>206
がんばってみます><
0208デフォルトの名無しさん2006/01/09(月) 17:51:18
一度にあれこれ考えすぎてるんだろうな
0209デフォルトの名無しさん2006/01/09(月) 18:00:36
自分が実際にオセロやって裏返すときに考える過程をひとつずつ思い出して
それをそのままコーディングすればいいじゃない
0210デフォルトの名無しさん2006/01/09(月) 18:31:18
C言語塾とかやったら成り立つだろうか?
02111982006/01/09(月) 18:32:58
だめだスパゲッティになってきて頭が混乱してきた><
ふぅ少し休憩・・・
0212デフォルトの名無しさん2006/01/09(月) 18:38:11
始めまして、VC++を学ぼうと思うのですが
いまいちどれを購入したらいいかわからないです。
とりあえず探してみたものなのですが
Microsoft Visual Studio .NETてのは、C++はいってるんですか?
ちなみに学生なので購入はできそうなのですが・・・・
あと、お勧めとかあったらおしえてください。
0213デフォルトの名無しさん2006/01/09(月) 18:40:01
つ アカデミパック
02142122006/01/09(月) 18:47:40
すみません、書き足りない部分が・・・・
Microsoft Visual Studio .NETの説明をみていると
複数の言語が入っているようなとらえ方をしてしまっているのですが
それであっているのでしょうか??
そうなると、C++でも使えなくなる命令語とかでてきるのでしょうか?
初歩の初歩だと思いますがどうか回答お願いします^^;
02152122006/01/09(月) 18:49:38
Microsoft Visual Studio .NETは、C++のアカデミパックってとこですか?
0216デフォルトの名無しさん2006/01/09(月) 18:50:42
>>212
学生だからアカデミックパック買えばいいけど
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
まずは、ただだからこれでもつかってみ
0217デフォルトの名無しさん2006/01/09(月) 18:56:46
>>212
学生ならVisual Studio.net 2003 theSpokeを購入するのが安上がり。C++入ってる。
今は購入して登録するとVisual Studi.net2005 Proを無償でDL出来るキャンペーンみたいなこともやってる。
スレ違いだけどな
02182122006/01/09(月) 22:05:58
無料DLみたいなのできました^^
いろいろ、ありがとうございました。
0219デフォルトの名無しさん2006/01/09(月) 22:36:16
http://www.gnu.org/software/libiconv/の使い方がわかりません
どっかにサンプルコードとかないですかね?
"libiconv サンプルコード"とかで検索しても上手くひっかからなくて…
0220デフォルトの名無しさん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用ラッパクラス)
02212192006/01/10(火) 00:13:33
>>220さん
回答ありがとうです
バカちんこたんなおいらでも分かりそうな気配がするので読んでみます
ありがとうございました
0222デフォルトの名無しさん2006/01/10(火) 01:26:25
C++ で、数値(int or long) を16進文字列に変換する方法を教えてください。
sprintf を利用するのはなしでお願いします。
16 のx 乗の余りをswitch-case で文字連結していくのはダサイですよね。。。
0223デフォルトの名無しさん2006/01/10(火) 01:30:31
>>222
std::ostringstream oss;
int n = 0x12345;

oss << std::hex << n;
std::cout << oss.str() << std::endl;
02242222006/01/10(火) 01:40:33
>>223
あぁーん、そんなやり方があるんですね。
ありがとうございます。
0225デフォルトの名無しさん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;
}
0226デフォルトの名無しさん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

ってのに奇数だけの和を求められるようにするにはどう変形すればよいですか?
0227デフォルトの名無しさん2006/01/10(火) 03:18:15
>>226
スレ違い
0228デフォルトの名無しさん2006/01/10(火) 06:58:46
つーかマルチだ
0229デフォルトの名無しさん2006/01/10(火) 10:18:35
はわわー
0230デフォルトの名無しさん2006/01/10(火) 12:06:40
ウィンドウズアプリケーションを作っていますが、
他のアプリケーションを起動させる関数が分からなくて困っています。
自分のアプリケーションでヘルプボタンを押したら
ヘルプ用に作成してあるHTMLファイルをIE等で開きたいのです。
検索したもののキーワードが悪いのか、
いくらでも出てきそうなのに出てきません。
よろしくお願い致します。

環境:
WinXP(SP2)
BCC5.5.1
0231デフォルトの名無しさん2006/01/10(火) 12:07:19
ShellExecute()
Win32スレに逝った方がいいよ。
02322302006/01/10(火) 12:32:02
>>231
ありがとうございます!
0233ちょっと教えてください2006/01/10(火) 12:54:48
eclipseでc/c++をコンパイルして実行したいのですがいまいちうまく
いきません。cdtとcygwinをいれました。で、このサイトを
http://www2.atwiki.jp/ccw/pages/18.html
参考にmakefileをつくりビルドしましたが実行ファイルができません
今はhello01をビルドしてもコンソールに何もメッセージは出ていません。
どうすればc言語をコンパイル実行できますか?
0234デフォルトの名無しさん2006/01/10(火) 13:00:26
>>233
まずは、コマンドラインでコンパイルできるか試してみたら?
その手のIDEはコンパイラが適切にインストールされていることが前提なのだし。
0235ちょっと教えてください2006/01/10(火) 13:16:43
>>234
コマンドラインからはきちんとコンパイルできてa.exeができて実行できます
0236デフォルトの名無しさん2006/01/10(火) 13:49:49
>>235
makeは?
つーか、その辺になるとEclipseスレか。
#あるのか知らんが。
0237ちょっと教えてください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)
0238デフォルトの名無しさん2006/01/10(火) 14:25:35
こまっています・・・

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

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

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

このAPIは端末の設定か何かで動作が変るものでしょうか??
0239デフォルトの名無しさん2006/01/10(火) 14:42:42
Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/
0240デフォルトの名無しさん2006/01/10(火) 19:56:46
Getメソッドによく
const char* getName() const;
の表記が見られますが、関数getName()の後ろにまで const を付ける意味が知りたいです。
const char* はgetNameの戻り値がconstである事を表しているのだと思いますが
後ろの const の役割がわかりません・・・
0241デフォルトの名無しさん2006/01/10(火) 20:00:34
メンバ変数を変更しない
0242デフォルトの名無しさん2006/01/10(火) 20:03:35
>>241
なるほど、クラス内のメンバ変数も変更されないという事ですね。どうもです。
0243デフォルトの名無しさん2006/01/10(火) 20:13:24
あらゆる代入などの変更処理をしない
0244デフォルトの名無しさん2006/01/10(火) 20:27:33
名前: デフォルトの名無しさん
E-mail: sage
内容:
コマンドの引き数として<実数><演算子><実数>の形で与えられた
四則演算を計算し、結果を出力するプログラムを書いたのですが、
引数が2個あたえられた場合にエラーを出力させる所が良くわかりません・・・
下のプログラムに書き足すとしたらどうしたら良いでしょうか?
0245デフォルトの名無しさん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;
}
0246デフォルトの名無しさん2006/01/10(火) 20:29:27
誤爆スマソ
0247デフォルトの名無しさん2006/01/10(火) 22:47:45
>>237
hello03
0248デフォルトの名無しさん2006/01/10(火) 22:56:14
そもそもTAEGET
0249デフォルトの名無しさん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); // コンテナから消去
      }
    }
  }
};
-------------------------------------------------------------------------
これはコンテナから削除済みの要素へのイテレータがインクリメントされてしまうので、
落ちるのは当然なのかもしれません。そこで、次のように書き直してみました。
0250デフォルトの名無しさん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番目のものと何ら変わっていないように思えるのですが…。
0251デフォルトの名無しさん2006/01/11(水) 01:13:43
>>250
erase()したら、イテレータが無効になる。二番目のものは、erase()
が返す、次の要素を指すイテレータを改めて取得しているので落ちない。
0252デフォルトの名無しさん2006/01/11(水) 01:21:28
>>251
なるほど。
next_it = current_it+1;
としてても、current_itがerase()されたらnext_itも無効になるんですね。
ありがとうございました。
0253デフォルトの名無しさん2006/01/11(水) 01:31:46
コンテナの要素をいじくりまわすときは、
for文は使わずに、algorithm使った方がいいよ。
for文は危険だし、遅い。
0254デフォルトの名無しさん2006/01/11(水) 01:35:49
>>253
remove_if()でも使え、って事かな?
この場合は、後ろ側に集められた不要な要素をまとめてerase()する事になるね。
0255デフォルトの名無しさん2006/01/11(水) 01:40:35
ん、やっぱりremove_if()はだめだな。「削除した要素」は、「削除されなかった
要素」で上書きされる」ってあるから、上のようなオブジェクトをポインタが指す
例では、メモリリークが起きる。

for_each()を使っても、要素を「詰める」事はできないし、どのアルゴリズムを
使えばすっきりする?
0256デフォルトの名無しさん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());
でもってゼロのやつだけまとめて消すってんでダメか?
0257デフォルトの名無しさん2006/01/11(水) 01:54:06
そこでスマートポインタですよ
0258デフォルトの名無しさん2006/01/11(水) 02:00:22
この場合はやっぱり普通にfor文で回して、boost::ptr_vectorかboost::scoped_ptr
を使うべきだな。
erase()はEffective STLを見ればわかるように、返り値を次のイテレータとすれば
全く問題ない。
0259デフォルトの名無しさん2006/01/11(水) 02:01:30
何でboost::ptr_deque<>ではダメなの?
0260デフォルトの名無しさん2006/01/11(水) 02:02:08
それはそうだが、メモリの再配置が起きるんで一括して消すにこしたことはない、
ともEffective STLには書いてあったぞ。
0261デフォルトの名無しさん2006/01/11(水) 02:10:06
AccessViolationのような例外?はC++ではcatchできないんでしょうか?
0262デフォルトの名無しさん2006/01/11(水) 02:11:18
catch(...) で catch できない?
02632612006/01/11(水) 02:18:10
>>262
できないみたいです。
0264デフォルトの名無しさん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;
}
0265デフォルトの名無しさん2006/01/11(水) 02:20:43
>>259
う・・・・そういうのもあったのか。勉強不足ですた。スマソ
>>260
std::remove()が、消すべき要素を後ろ側に集めてくれるのなら
それも使えるが、現実問題、>>256のようにするしかないし。
0266デフォルトの名無しさん2006/01/11(水) 02:26:27
うわぁ、boost::ptr_listやboost::ptr_set、boost::mapなどもある。
0267デフォルトの名無しさん2006/01/11(水) 03:27:40
>>265
std::partitionが消すべき要素を後ろに集めるよ。
02682672006/01/11(水) 09:52:36
あ、そうだ。忘れてた。
std::partition は安定してないから順番も保持したいなら std::stable_partition
その辺は臨機応変に
0269デフォルトの名無しさん2006/01/11(水) 12:40:58
externの使いかたを猫でもわかるように説明してください。
0270デフォルトの名無しさん2006/01/11(水) 12:43:56
>>269
にゃぁ、にゃにゃにゃん、にゃ。
ぎゃーにゃ!
0271デフォルトの名無しさん2006/01/11(水) 12:48:52
>>269
とにかく付けとけば良い。コンパイラに怒られたら外す
0272デフォルトの名無しさん2006/01/11(水) 15:18:49
externって意味が違う使いかたがあるよね
0273デフォルトの名無しさん2006/01/11(水) 15:47:28
CとC++ではexternの意味が違う。どちらの事を聞いているのかはっきり言え。
02742692006/01/11(水) 16:00:13
>>273
そうなんですか。
ではCでお願いします。
02751 ◆HSRZfxFrgo 2006/01/11(水) 16:17:08
 C言語でGIFのデータをメモリに展開し、
LCDに表示したいと思っております。

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

C++だとできなかったので、Cのソースコードでお願いいたします。
よろしくお願いいたします。
0276デフォルトの名無しさん2006/01/11(水) 16:18:17
どこの1だよこのカス
帰れ
0277デフォルトの名無しさん2006/01/11(水) 16:18:19
変数宣言ではグローバル変数を意味する。初期化子があると定義になる。関数では無いのと同じ。
0278aaa ◆HSRZfxFrgo 2006/01/11(水) 16:23:36
>>276
すいません、間違えました。

でも、非常に困っているので、誰かお願いいたします。
0279デフォルトの名無しさん2006/01/11(水) 16:24:45
>>278
>C++だとできなかったので
できない訳無いやん。
0280デフォルトの名無しさん2006/01/11(水) 16:28:30
>>278
別にお前が困ろうと死のうと俺らには関係ないから消えろ
0281aaa ◆HSRZfxFrgo 2006/01/11(水) 16:33:43
C++は今の開発環境では使わないので困っております。
Cを使っています。
よろしくお願いいたします。
0282デフォルトの名無しさん2006/01/11(水) 16:36:16
C++のソースをCに書き直せばよいだけ。
0283aaa ◆HSRZfxFrgo 2006/01/11(水) 16:40:46
>>282
回答ありがとうございます。
C++からCに直すのは簡単でしょうか?
0284デフォルトの名無しさん2006/01/11(水) 16:44:15
場合による
0285デフォルトの名無しさん2006/01/11(水) 16:52:44
>>278
読み込んで表示するだけならソース探すより自前で組んだ方が早いと思うが。
ttp://www.tohoho-web.com/wwwgif.htm
0286デフォルトの名無しさん2006/01/11(水) 19:47:13
gifフォーマットって、なんか躓くようなややこしいところあったっけ?
単純な画像形式でしょ。
0287デフォルトの名無しさん2006/01/11(水) 19:53:45
ダメだこいつ
0288デフォルトの名無しさん2006/01/11(水) 20:26:47
チン子
0289デフォルトの名無しさん2006/01/11(水) 22:00:36
>>270
テラワロスw
0290デフォルトの名無しさん2006/01/11(水) 23:37:46
windowsにて
ファイルオープンのプログラムを組んだとき、
ファイルはどのフォルダに入れておいたらいいんですか?
0291デフォルトの名無しさん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`'"'=‐-‐="   `= '
       `'=-.:.:.:.:.:.:,-='

0292デフォルトの名無しさん2006/01/11(水) 23:49:25
質問です。
linuxでスレッドを複数経てたプログラムで
forkしてプログラムの複製を作った場合、スレッドも複製されるのでしょうか?
たとえば、スレッドを2つのプログラムをforkしたら
子プロセスもスレッドが2つ走ってる状態になりますか?
0293デフォルトの名無しさん2006/01/12(木) 00:01:16
>>290
そもそもファイルオープンのダイアログでは最初に表示されるフォルダを指定できる。
0294デフォルトの名無しさん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”を表示させないようにするにはどうしたらいいのか、教えてください。
0295デフォルトの名無しさん2006/01/12(木) 04:37:52
unsigned char
0296デフォルトの名無しさん2006/01/12(木) 04:42:44
>>295
早速の返事ありがとうございました。
unsigned char *mpにすると解決できました。



0297デフォルトの名無しさん2006/01/12(木) 11:19:21
>>291って何の絵?
メメタアと書いてあるように見えるが
0298デフォルトの名無しさん2006/01/12(木) 11:26:45
まんまメメタアの絵
0299デフォルトの名無しさん2006/01/12(木) 16:33:10
【環境】 WindowsXP SP2 / VC.NET 2003 / C言語
【質問】 画面消去の方法は?
0300デフォルトの名無しさん2006/01/12(木) 16:52:41
つ デビッド・カッパーフィールド
0301デフォルトの名無しさん2006/01/12(木) 17:03:50
>>299
デスクトップのプロパティ → スクリーン セーバー → 電源 → モニタの電源を切るを一分にしてOK → 一分待つ
0302デフォルトの名無しさん2006/01/12(木) 18:31:38
>>292
やってみたら?
0303デフォルトの名無しさん2006/01/12(木) 20:35:46
>>301
黒で塗りつぶしたウィンドウを全面に表示する。ついでに、プログラムの切り替えを無効にする。
しかし、それでも他のプログラムから割り込まれる可能性はあるので、画面消去というのは難しい。
もっとも確実な方法は、画面そのものをユーザーの目に触れないところに移動することだけど、
残念ながら、Cではその処理を行うことは出来ない。
0304デフォルトの名無しさん2006/01/12(木) 20:39:50
>>299
電源プラグを抜く
0305デフォルトの名無しさん2006/01/12(木) 21:09:40
反物質をモニタに接触させれば対消滅するよ。
0306デフォルトの名無しさん2006/01/12(木) 21:42:13
>>300
吹いた
0307デフォルトの名無しさん2006/01/12(木) 22:17:34
>>299
粗大ごみに出す
0308デフォルトの名無しさん2006/01/13(金) 00:06:02
>>299
DirectXで真っ黒なビットマップをフルスクリーン表示だ!
0309デフォルトの名無しさん2006/01/13(金) 11:20:17
>>303
> 画面そのものをユーザーの目に触れないところに移動することだけど、

ディスプレイ自体と画面は明確に分けるべきだな。
つまり、CRTディスプレイならブラウン管を、
液晶ディスプレイなら液晶を取り外すのが正しいはずだ。
0310デフォルトの名無しさん2006/01/13(金) 11:45:46
>>299
もうちょっと何がしたいのか書いたほうがいいよ(笑)
0311デフォルトの名無しさん2006/01/13(金) 12:03:11
いちいちそんな事しなくても、目を瞑ればいいじゃないか!
0312デフォルトの名無しさん2006/01/13(金) 12:45:47
>>311
それは見ないだけであって消去することにはならない。
0313デフォルトの名無しさん2006/01/13(金) 13:03:35
投げ捨てればいいと思うよ
0314デフォルトの名無しさん2006/01/13(金) 13:13:21
結論としては、Cでは「画面を消去」することはできないということですね。
0315地獄界のC使い2006/01/13(金) 14:06:57
エスパー募集中の方が自己完結しますた。
0316デフォルトの名無しさん2006/01/13(金) 14:33:34
Microsoft Visual Studio.NETの2003を使っています。
新規作成でVisualC++のWindowsフォームアプリケーションを選択し、
プログラムを作成したいと思います。何かいい参考書はないでしょうか?
この間中身をよく確かめずに買ったテキストはMFCしか扱ってませんでした…
0317デフォルトの名無しさん2006/01/13(金) 14:49:48
>>316
スレ違い。書籍スレへ。
03182992006/01/13(金) 15:04:14
コマンドラインの文字を全消去です。
猫でもわかるだと、\x1b[2Jで
できるはずなのですができないのです。
0319デフォルトの名無しさん2006/01/13(金) 15:55:19
コンソールの文字とちゃうの。


curses使うとか。
0320デフォルトの名無しさん2006/01/13(金) 16:04:40
そうです、コンソールでした。
その、cursesとは?
0321デフォルトの名無しさん2006/01/13(金) 16:06:13
>>318
system( "cls" );
0322デフォルトの名無しさん2006/01/13(金) 16:09:57
318
Win9xならできるがNTでは16ビットプログラムでしかできない。
0323デフォルトの名無しさん2006/01/13(金) 16:10:51
>>320
状況がまるで分からん。そもそもそんなことをする必要性は?

手段を検討する以前のスキルだと思われるから、自分で考えた
手段を聞くより、総合的に何をしたいか聞くほうがいいと思う。
0324デフォルトの名無しさん2006/01/13(金) 18:37:37
>>321
その方法がありましたか。
あり。
0325デフォルトの名無しさん2006/01/14(土) 05:56:19
C++でファイルを読み込む前にサイズを知る方法を教えてください。
環境はWindowsなのでAPI使えば良いのは分かっているのですが出来れば環境非依存で標準の範囲で行いたいのです。
よろしくお願いします。
0326デフォルトの名無しさん2006/01/14(土) 05:58:07
無い。
0327デフォルトの名無しさん2006/01/14(土) 07:11:18
fseekとftellくみあわせたらサイズ収得できるよ
0328デフォルトの名無しさん2006/01/14(土) 07:33:32
>>326
標準に無いってのはC++使う範囲だと必要無いって事ですかね。
あっても良さそうなもんですが……。そう言われれば納得です。
>>327
調べてみましたがSEEK_END指定してftellですね。
参考にさせていただきます。

ありがとうございました。
0329デフォルトの名無しさん2006/01/14(土) 08:58:56
>>328
必要ないのじゃなく、標準の想定外。
ファイルサイズの概念がないOSだってあるのだから。
0330デフォルトの名無しさん2006/01/14(土) 09:12:53
入力した数値を自分の指定した数字&文字の組み合わせに変換することって出来るんですか?
例えば、入力値『110002』→出力値『1B0C2A』みたいに、
1が2つ続くから1B、0が3つ続くから0C、2が1つだから2Bというようにしたいんですけど。
何かやりかたがわかりません。
色々な本とか見て、進数を他の進数に変換するのとかは見つけられたんですけど、
自分で上みたいに指定して数字を変換ことが出来なくて。
03313302006/01/14(土) 09:18:13
ちなみにソフトのバージョンはVisual Basic6.0です。
0332デフォルトの名無しさん2006/01/14(土) 09:23:08
スレ違い。
0333デフォルトの名無しさん2006/01/14(土) 09:27:00
>>331
ええぇぇ
ここVisual Basicのスレではないよ。
03343302006/01/14(土) 09:33:12
あぁ〜間違いましたC++6.0です。
03353302006/01/14(土) 09:34:30
何度もすみません、
Visual J++6.0でした。
03363302006/01/14(土) 09:37:24
>>335
誰ですか・・・
0337デフォルトの名無しさん2006/01/14(土) 09:40:15
VBスレへの誤爆でした。

>>334-336
お疲れさん。
0338デフォルトの名無しさん2006/01/14(土) 09:41:22
ヒント:ランレングス圧縮
0339デフォルトの名無しさん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・・・となって
バイナリっぽくないんですが、もしかしてバイナリデータでは
ないんでしょうか?

といのは
03403392006/01/14(土) 22:45:29
WriteFile( HANDLE ・・・ );
に対して今まで
sprintf( str, "%f\r\n", f );
の str を渡していました、それをVCのエディタで開くと
0.00000
と表示されて
000000 00 00 00
といった具合になってなかったもので
もしや、いままでバイナリデータで保存していなかったのか
と思った次第であります。
0341デフォルトの名無しさん2006/01/14(土) 22:54:07
>>339
出力されたファイルサイズ見てみれば?
03423392006/01/14(土) 23:05:28
>>341
100000までの数字を出力してみたところ
out << i の方が out.write() よりサイズが
大きかったということは
out << i は
バイナリの皮をかぶったテキストだったのか・・・!!
0343デフォルトの名無しさん2006/01/14(土) 23:22:28
アフォか。てきとうなバイナリエディタ使って自分で確認しろよ。
0344デフォルトの名無しさん2006/01/14(土) 23:25:55
>>342
ios::binaryフラグの意味を誤解してる。
それはROWモードで開くか、COOKEDモードで開くかを決めるだけ。
それもWindowsにしか意味がなく、UNIXやLinuxではどちらも同じ。

std::ostream::put()でも使う事だな。
0345デフォルトの名無しさん2006/01/14(土) 23:34:36
えーと、
知ったかぶって、理解して無いくせにrawとcookedという用語を使うのは
ちょっとみっともないと思います。
0346デフォルトの名無しさん2006/01/14(土) 23:39:21
>>345
ぐぐりもせずに私見を述べて優越感に浸っているバカはこいつですか?
0347デフォルトの名無しさん2006/01/14(土) 23:48:30
>>344,346
少なくとも C++ の規格では名前どおりの "binary mode", "text mode" が使われてるのに
ここで"ROW"だの"COOCKED"だのを持ち出しているのはおかしい。
おかしいのに口調が偉そうなのは、確かにみっともない。
用語をスペルミスしといて、偉そうにぐぐれとか言うのも大変みっともない。
0348デフォルトの名無しさん2006/01/14(土) 23:51:42
>>347
スペルミスではなく、OS側から見た視点だけの事。
そういう些細な事で揚げ足を取りたがるのは、自信がない証拠。
0349デフォルトの名無しさん2006/01/14(土) 23:52:47
ミスを認めないのは厨房の証拠。
0350デフォルトの名無しさん2006/01/14(土) 23:54:43
どうしてもミスという事にしたいのが貴方の要望なのですね。
残念ながらその手には乗りませんのであしからず。
0351デフォルトの名無しさん2006/01/14(土) 23:56:11
ミスというか、無知だな。
0352デフォルトの名無しさん2006/01/14(土) 23:56:25
OS側から見ると raw が row になるのか。テラオソロシス
0353デフォルトの名無しさん2006/01/14(土) 23:56:30
いや、デバイスのraw,cookedと
ライブラリが'\n'をCR+LFに変換するという動作とは
全く何の関係も無いよ。

知ったかぶってる人がいるみたいだけど。
0354デフォルトの名無しさん2006/01/15(日) 00:50:39
>ここで"ROW"だの"COOCKED"だのを持ち出しているのはおかしい。

coocked?
0355デフォルトの名無しさん2006/01/15(日) 00:55:12
cock-a-doole-do
03563392006/01/15(日) 00:56:08
風呂にいっとる間に凄い事になっとりますな
rawとcookedなんぞ初めて聞きました
ググッてみると・・・わからん
奥が深い・・・!

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

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

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

数々のレスどうもでした。
0357デフォルトの名無しさん2006/01/15(日) 01:08:18
>>356
だから、被るも何も、改行コードが違うだけだってばさ。
0358デフォルトの名無しさん2006/01/15(日) 07:22:15
何度みても>>347の「少なくとも」が笑える
意気揚々と出てきて1ターンで逃げるなよw
0359デフォルトの名無しさん2006/01/15(日) 07:38:58
(・∀・)ニヤニヤ
0360デフォルトの名無しさん2006/01/15(日) 12:20:45
>>358 まだいたのか。
0361デフォルトの名無しさん2006/01/15(日) 12:27:40
まんこ
0362デフォルトの名無しさん2006/01/15(日) 15:15:35
特定のクラスからしかインスタンスが作れないクラスを作るには
どうやったらいいのでしょうか。
できればコンストラクタも第三者(クラス)から見えないようにしたいのですが。
0363デフォルトの名無しさん2006/01/15(日) 15:20:26
interface
0364デフォルトの名無しさん2006/01/15(日) 15:26:59
コンストラクタをprivateにしたクラスを作って
「特定のクラス」をフレンドクラスにしてやるってのじゃだめ?
0365デフォルトの名無しさん2006/01/15(日) 15:57:38
純粋仮想クラス
0366デフォルトの名無しさん2006/01/15(日) 16:08:30
インナークラスにするとか。
わかりにくくなるけどな。
03673622006/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(); //<-エラー
}
こんな感じですか?
03683622006/01/15(日) 23:53:15
A* createA(){return new C(10);}
の10は不要です。
0369デフォルトの名無しさん2006/01/16(月) 02:04:58
gccでテンプレート展開後のC++コードを出力させる方法はないでしょうか?
0370デフォルトの名無しさん2006/01/16(月) 08:19:05
>>369
とりあえず、無い。
念のため言っておくが、 template はプリプロセッサじゃないから、
「展開」なんて処理は行われていない可能性が高い。
0371デフォルトの名無しさん2006/01/16(月) 08:33:41
>>369
インラインテンプレート関数は最適化で痕跡さえ消えるし、アセンブリ出力を読むしか。
0372デフォルトの名無しさん2006/01/16(月) 16:04:30
templateってC++言語のソースに埋め込むスクリプト言語みたいだよね。
HTMLに埋め込むPHPみたいな感じ。
0373デフォルトの名無しさん2006/01/16(月) 16:19:16
全然チゲー
0374デフォルトの名無しさん2006/01/16(月) 18:33:36
>>373
メタプログラミングの視点でみると
>>372の言うことはある意味間違いではないかと。

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

とは言ってもスクリプト言語としては可読性最悪ですけどw
0375デフォルトの名無しさん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++ともに
仕様で認められている記述なのでしょうか?
0376B言語2006/01/22(日) 14:51:44
C言語で作ったプログラムってふつうのプログラムみたいにダブルクリックしただけで使えるんですか?それともコンパイラしなきゃだめですか?
0377デフォルトの名無しさん2006/01/22(日) 14:55:29





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






0378デフォルトの名無しさん2006/01/22(日) 14:59:10
>>375
ちょっと考えただけだと NULL(); という文はコンパイルできないはず。
0379デフォルトの名無しさん2006/01/22(日) 15:00:23
>>376
いろいろ誤解しているようだがとりあえず、
C言語で書いたプログラムはコンパイルしないと実行ファイルにならない。
0380デフォルトの名無しさん2006/01/22(日) 15:02:46
>>376
普通のプログラムの大半はC言語で書かれています
0381B言語2006/01/22(日) 15:04:58
でもコンパイルしてできたexeファイルを実行しても何も起きないんだけど…
03823752006/01/22(日) 15:12:20
>>378
自分の環境だと
C言語としてコンパイルすると
「関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。」
というエラーが発生しますが、
C++としてコンパイルすると問題ない
(>>375のような結果になる)ようです。
気持ち悪いので自分では使わないようにします。
0383デフォルトの名無しさん2006/01/22(日) 15:14:39
>>381
どうせ、一瞬で終わっただけだろ。
GUIプログラムならダイアログでも出せばいいし、そうでないならコマンドインタプリタから実行すればいい。
0384デフォルトの名無しさん2006/01/22(日) 15:20:08
>>381
それで何か答えてもらえるとでも思うのか?
ここに居る奴らはエスパーじゃないぞ。
具体的な答えが欲しいなら、具体的な情報をまとめてよこせ。
0385デフォルトの名無しさん2006/01/22(日) 15:21:36
>>381
動体視力鍛えろ
0386B言語2006/01/22(日) 15:24:27
1つのプログラムをコンパイルしたら .C .EXE .obj .tds
とかいう4つのファイルが出てきてそのうちのexeをクリックしても
何も起きずに一瞬で消える現象について解明したいってわけ
0387デフォルトの名無しさん2006/01/22(日) 15:28:55
まずは質問の仕方についてお勉強して来い
そして答えは>383
0388デフォルトの名無しさん2006/01/22(日) 15:32:08
>>386
「消える」ってことは何か見えてるんだろ?
「何も起きない」とは全然違うじゃねーか。
0389B言語2006/01/22(日) 15:33:27
失せろクソオタク
どーせお前らはパソコンがなけりゃただの安月給の貧乏人だよ負け犬ども
0390デフォルトの名無しさん2006/01/22(日) 15:39:36
パソコンがある現代では高月給の大富豪で勝ち組です。
0391デフォルトの名無しさん2006/01/22(日) 15:40:35
>>386
mainのreturn直前にsystem("pause");でも入れ溶けクズ
0392デフォルトの名無しさん2006/01/22(日) 15:41:03
わはは、なんだこいつ。キレるのはえーな。おまえが失せろよ。
0393B言語2006/01/22(日) 15:41:32
#include <stdio.h>
int main (void)
{
printf("おはよう\n");
return 0;
}
0394B言語2006/01/22(日) 15:42:34
大富豪さん、大貧民のルールはわかりますか?


だったらeME−RU 
0395B言語2006/01/22(日) 15:47:50
すいませんすいません
まだ中2なんですぐカッかしちゃううんですよー
ぎゃははーーー
うひゃひゃ
いひゃひゃフォー
0396B言語2006/01/22(日) 15:50:06
>>391さんありがとー!!

C言語は一瞬で消えるから今日ヨーカドーで2500円のVsual Basic パーフェクトマスター
買っちゃったー
ぐはわわわわわピー
0397デフォルトの名無しさん2006/01/22(日) 15:53:36
芸が細かいな。ちゃんと目欄も0に統一してある。
で、中身は何人いるんだい?
便乗荒らしはよくないぞ。
まさか一人って事は無いんだろう?


まさかなぁ、はははは、は、は、、、、はぁ。
0398デフォルトの名無しさん2006/01/22(日) 15:58:28
2500円「仕方ないなあ」
Vsual Basic「だってえ」
2500円「どお?これが2500円よ」
Vsual Basic「ウィンドウが!ウィンドウが!」
一瞬で消えるから「パケット消失」
2500円「まいどあり」
Vsual Basic「Vista・・・」
0399デフォルトの名無しさん2006/01/22(日) 16:05:24
>>382
つまり、_DEBUG定義時にHOGE関数が必要で、それ以外の時にはそもそも必要無いのだろ?
だったらそんな不確実な書き方せんと、
HOGE()の所を↓にしとけよ

#ifdef _DEBUG
  hoge();
#endif
0400B言語2006/01/22(日) 16:05:26
しかも買ってから気付いた事

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

ギャーハハハハ
0401B言語2006/01/22(日) 16:06:27
そーゆーことはちゃんと前書きにかいときなさぁぁぁぁぁい!
0402B言語2006/01/22(日) 16:07:11
こっちは数少ないこづかいでヤリクリしとんじゃいボケッ!””
0403デフォルトの名無しさん2006/01/22(日) 16:09:24
むしろこずかいが無い方がおまえさんのタメになるかと。
ここに書くヒマがあったらネット検索で勉強しなさいナ。
0404B言語2006/01/22(日) 16:12:47
おーいらーのーあーーたまーはーつーるっぱげー

がってんだ!

ボリショイサーカス
0405%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
0406%cofigurationOpeICO@2006/01/22(日) 16:15:26
ていのうだなのまおどえらばかだろねあいにえしてんだぼけさわんあjふぃ!母は母八は母はhhッははhhっはっははははははははっははははhっははっははhhh
0407デフォルトの名無しさん2006/01/22(日) 16:21:51
4人ぐらい?
0408デフォルトの名無しさん2006/01/22(日) 16:53:25
5人じゃね?
0409デフォルトの名無しさん2006/01/22(日) 16:55:55
6人だお
0410デフォルトの名無しさん2006/01/22(日) 16:56:12
>399
それだと何カ所もある場合めんどくさいじゃん。
#ifdef _DEBUG
 #define HOGE() hoge()
#else
 #define HOGE()
#endif
0411しろうと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;
}
}
0412>4112006/01/22(日) 17:26:52
すみません訂正します。
クラスを使用して、戻り値の配列を返したいのですが
ー>
クラスを使用して、戻り値に配列を返したいのですが
0413B言語2006/01/22(日) 17:27:17
てめえらひまだなオタッキー
0414デフォルトの名無しさん2006/01/22(日) 17:31:52
乗り遅れカコワルイ
0415デフォルトの名無しさん2006/01/22(日) 17:33:13
>>411
配列は戻り値にも引き数としても直接受け渡し出来ない
0416デフォルトの名無しさん2006/01/22(日) 17:33:27
初心者でもお気楽にWin32APIを呼び出せるように
ライブラリ化したコードとか提供されていないのデツカ?
0417デフォルトの名無しさん2006/01/22(日) 17:39:40
(°Д°)ハァ?
0418デフォルトの名無しさん2006/01/22(日) 17:42:50
>>416
つ[MFC]
0419デフォルトの名無しさん2006/01/22(日) 17:51:04
>>411
配列は戻り値にできない。そこでどうするかというと、
単純な方法ではnew []して動的メモリを返したり、
戻り値の代わりにポインタとその要素数を引数にしたり、
或いは要素数が固定なら配列の参照を引数にしたり。

しかしstd::vectorとかboost::arrayのような配列の代わりにクラス(・構造体)を返す方法がよりよいと思う。
0420デフォルトの名無しさん2006/01/22(日) 17:52:27
>>418
ますますお気楽とは正反対の方向だと思うけど。

>>416
Win32API自身もライブラリだよ、お気楽かどうかはともかく。
0421デフォルトの名無しさん2006/01/22(日) 18:07:43
ゴキゲン
0422デフォルトの名無しさん2006/01/22(日) 18:11:43
ナナメ
0423デフォルトの名無しさん2006/01/22(日) 18:13:45
パンパンパーン  ∴
  _, ,_  ∩  , ・,‘
 ( ゚Д゚)彡☆
   ⊂彡☆))Д´)
   .∴∴☆
  . ∴
0424しろうと2006/01/22(日) 18:18:26
ご返事ありがとうございます。
どうも感嘆にはできないのかー。
逃げ道はあるようですがなんか難しそうですね。
0425しろうと2006/01/22(日) 19:53:23
VisualStudioC++を使用しています。

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

0426デフォルトの名無しさん2006/01/22(日) 19:56:07
>>425
sizeof(s) / sizeof(s[0])
0427デフォルトの名無しさん2006/01/22(日) 20:03:27
「関数」だそうだぞ。
0428デフォルトの名無しさん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);
0429デフォルトの名無しさん2006/01/22(日) 20:08:41
>>425
template <typename T>
inline int sizeofarray(const T& a) {
    return sizeof(a) / sizeof(a[0]);
}
0430デフォルトの名無しさん2006/01/22(日) 20:28:20
(゚Д゚)ハァ?
0431デフォルトの名無しさん2006/01/22(日) 21:06:02
列挙型の設定ファイルに書き出し/読み込みをしたいのですが、コンパイラの警告無視の強引なキャストまたはswitchによる物量作戦以外のスマートな解決方法はないでしょうか?
0432デフォルトの名無しさん2006/01/22(日) 21:14:25
>>431
>列挙型の設定ファイルに

「列挙型を」って言いたいのか?
別に値のまま書き出せばいいじゃん
それとも設定は人が書くようなもんなの?
0433デフォルトの名無しさん2006/01/22(日) 21:26:37
>>431
reinterpret_castを使うのなら強引だと言えるが、
列挙型から整数型へは昇格があるし、逆もstatic_castで十分だし、強引なことは何も必要ないと思うのだが。
04344312006/01/22(日) 21:46:37
うへ、暗黙のキャストでやってたorz
0435デフォルトの名無しさん2006/01/22(日) 22:18:17
これからC言語を始めようと思っているのですが、
いい参考書ありますか??
文字ばっかり羅列しているより例題みたいなとかが
載ってるのがいいのですが......
0436デフォルトの名無しさん2006/01/22(日) 22:23:39
>>435
入門書のほとんどは章毎とかで演習問題が付いていると思うよ?
あとはこっちで。
推薦図書/必読書のためのスレッド PART28
http://pc8.2ch.net/test/read.cgi/tech/1133629787/
0437デフォルトの名無しさん2006/01/22(日) 22:42:02
>>436
ありがとうございます。
0438デフォルトの名無しさん2006/01/23(月) 07:52:26
>>431
列挙体型のサイズは処理系依存なんで、
キャスト後のサイズと違うことがあって問題になる可能性がある。
例えば、含まれる値が SHRT_MAX 以下なら
short int のサイズになる処理系があってもいいわけだが、
そういう場合、int が 32 ビットなら、
int と仮定して処理しようとするとおかしくなる。
DirectX 関係の列挙体に一見余計な 0xFFFFFFFF という値が入ってるのは、
そういう処理系でも列挙体のサイズが 32 ビットになるようにするため。

一番いいのは、void* を引数に取って、サイズを指定して読み書きする関数を使うこと。
これならキャスト絡みの問題も列挙体まわりの問題も回避できる。
0439デフォルトの名無しさん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を試してみたのですが、配信される音質が微妙に違うような気もしました。
0440デフォルトの名無しさん2006/01/23(月) 08:00:41
スレ違い
0441デフォルトの名無しさん2006/01/23(月) 08:01:12
>>440
じゃぁどこがいいですかね?
教えていただけると助かります。
0442デフォルトの名無しさん2006/01/23(月) 08:03:21
自分で探せよバカ
0443デフォルトの名無しさん2006/01/23(月) 08:04:13
>>442
どうせ知らないんだろw
知ったかぶり乙
0444デフォルトの名無しさん2006/01/23(月) 08:04:14
つーか鼬害。
0445デフォルトの名無しさん2006/01/23(月) 08:06:36
なんでこんなバカがム板に来たんだろね・・・
0446デフォルトの名無しさん2006/01/23(月) 08:17:46
>>445
バカじゃ無い奴は、大抵の問題を自分で解決できるから。
0447デフォルトの名無しさん2006/01/23(月) 08:30:39
自演乙w
0448デフォルトの名無しさん2006/01/23(月) 10:33:07
>>439
耳に頼るんじゃなく、差分取って確認しる。
0449デフォルトの名無しさん2006/01/24(火) 13:42:02
C++について質問です。
基底クラスB(メンバ関数はvirtualで宣言)を継承したクラスAのポインタを
Bにキャストして、そのメンバ関数を扱うのは安全なのでしょうか?
0450デフォルトの名無しさん2006/01/24(火) 13:43:21
B“のポインタ”にキャストするならば安全。
というか、それこそが多態性というものでは。
0451デフォルトの名無しさん2006/01/24(火) 14:53:50
>>450
ありがとうございます。
これで心置きなく使えます。
0452デフォルトの名無しさん2006/01/24(火) 16:26:27
別にキャストしてもしなくても同じじゃないの?
0453デフォルトの名無しさん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;
}

0454デフォルトの名無しさん2006/01/24(火) 16:54:20
>>453
>>>449
>メンバ関数はvirtualで宣言
04554532006/01/25(水) 00:27:29
>454
ごめんなさい。
0456デフォルトの名無しさん2006/01/26(木) 19:43:10
C言語を使ったCGIで自分の掲示板を作ってみたいので、
作り方のヒントになるような書籍やサイトがあったら教えてください。
基本的なHTMLの知識や、ファイル操作のやり方は分かるのですが、
win98環境でオフラインテストをする方法から分からないので、
よろしくお願いします。
0457デフォルトの名無しさん2006/01/26(木) 20:59:19
>>456
まずは「CGIとは何か?」から調べた方がよさそうだな。
0458デフォルトの名無しさん2006/01/26(木) 22:56:14
>>456
オフラインでテストならフリーのサーバーソフトが必要
04594562006/01/26(木) 23:16:35
>>457
CGIはサーバ上で動作するプログラムというように解釈しています。
掲示板をつくりには、HTMLで記載したフォームからプログラムへ、
データを送信して、処理を行わせ、実行結果を返すことが必要かと…
違っていたらゴメンナサイ。教えていただけると、助かります。

>>458
アパッチなどのことでしょうか?
サイトの説明を見たのですがよく分からなかったので、
その辺りを分かりやすく解説してある書籍かサイトを、
紹介していただけると、助かります。
よろしくお願いします。
0460デフォルトの名無しさん2006/01/26(木) 23:21:03
教えてクン乙
04614592006/01/26(木) 23:30:07
ゴメンナサイ。別のソフト、AN HTTPDの方で調べていったら、
何とか分かりそうなサイトが見つかりました。
こちらで勉強してみます。失礼しました。
0462デフォルトの名無しさん2006/01/26(木) 23:40:24
CreateGame〜陸海空オンライン〜開発始動!
有志によるMMOというジャンルのゲーム製作です。

参加資格:力ある者
0463デフォルトの名無しさん2006/01/27(金) 00:03:47
>>462
プロデューサーが最悪と言うことはよく解った
0464デフォルトの名無しさん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");
}


これがわかりません、教えてください
0465デフォルトの名無しさん2006/01/27(金) 00:09:09
宿題は宿題スレいけ
0466デフォルトの名無しさん2006/01/27(金) 00:09:51
失礼した
0467デフォルトの名無しさん2006/01/27(金) 00:20:17
質問です。
ガベコレが便利とかいう話はそりゃ組むだけの奴の勝手な理論であって、
メモリの確保/解放が明示的にできてないプログラムって可読性悪いよなってことでFAでいいでしょうか?
0468デフォルトの名無しさん2006/01/27(金) 00:23:30
ふぁ?
0469デフォルトの名無しさん2006/01/27(金) 00:26:26
ほぇ?
0470デフォルトの名無しさん2006/01/27(金) 00:29:40
用途による
0471デフォルトの名無しさん2006/01/27(金) 00:33:04
可読性は関係ないんじゃないか?
明示的な確保/解放を追いたいときは別だろうが、
そんなときにガベコレ使うバカは50%くらいしかおらんだろうし。
0472デフォルトの名無しさん2006/01/27(金) 00:44:22
問題は用途だな。
ガベコレに頼ろうとする奴は確保と解放を同じクラス内で
完結させようとはしないだろうからな。
あっちのクラスで用意したインスタンスを
こっちのクラスで解放するなんてこと普通にやってた環境なら
ガベコレなんぞ使ったら可読性は悪いな。
0473デフォルトの名無しさん2006/01/27(金) 09:54:27
>>461
CGIのプログラミングの前に、
HTTPのプロトコルの仕組みや、CGIの動作概要を覚えておくべき。
それが分かれば、>>456の様な質問は出なかったはず。

勉強の順番を間違っちゃいかんよ?
0474デフォルトの名無しさん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>"
}

0475デフォルトの名無しさん2006/01/27(金) 18:24:36
>>474
それぐらいはダレでも書けるだろう
設置でつまづく前に>>473だろうな
0476デフォルトの名無しさん2006/01/27(金) 22:49:55
その前に、「Cじゃないやん!」ってつっこんであげようよ
0477デフォルトの名無しさん2006/01/28(土) 08:36:17
そこをあえて黙っておくのがオトナの対応
0478デフォルトの名無しさん2006/01/29(日) 03:52:12
LANでTCP/IP(つーかソケット)を使った簡単なファイル転送プログラムを作ってみたいのですが、
ソケット通信周りの手頃なサンプルはないもんでしょうかね。
ファイル転送と言ってもファイル名やらタイムスタンプやらは後でどうとでもなるので、
単に中身だけが転送されればいいのだけれど。

探してみても、簡単すぎて固定長のKB以内のデータしか転送してなかったり、
逆にftpばりに高機能だったりで……
#Solaris/Linux/Cygwin(OrPSDK)で動かしたいというのもサンプル見つける障碍だったり。
0479デフォルトの名無しさん2006/01/29(日) 10:37:35
>>478
十分なサンプルだと思うけど?
何が不足していると思うわけ?
マルチプラットホームの部分?
0480デフォルトの名無しさん2006/01/29(日) 13:34:00
[開始文字] (データの情報)データ [終了文字]
を相手に送りつければ良いんじゃねえの?
04814782006/01/29(日) 17:49:19
>>480
終端文字まで受信することにすると、終端文字を含むファイルを送れない可能性が出てきてしまうので巧くないと思われ。
予めデータサイズを送れば(先頭に付加するなどして)よさそうだけど、サイズ分(例えば8バイト?)がパケット分割される可能性は?
また、途中でデータの流れが滞ったらタイムアウト処理しなければいけない?
など考えなきゃいけないことが多そうで、その辺りを反映したロジックが転がっていないかなぁと。
>>479
確かに、SolarisとLinux(orCygwin)とWinAPI(Winsock)の微妙な違いもよく判らない。
Linux用のサンプルがSolarisやWinsockだとそのままでは動かなかったりね。
0482デフォルトの名無しさん2006/01/29(日) 21:07:55
単にネットワークプログラミングの知識が不足してるだけと思うんだが
ECHOサーバ以外になんか作ったか?
0483デフォルトの名無しさん2006/01/29(日) 21:30:39
>>478
構造体使えばいいんじゃね?同期方式なんて面倒くさい
タイムアウトはソケットに着信があったかどうか見ればいい
残りの細かいことは適当なRFC読め

あとこれ
ttp://pc8.2ch.net/test/read.cgi/tech/1136005644/-6
0484デフォルトの名無しさん2006/01/29(日) 23:25:00
>>481
制御用とデータ用の2セッション持ってば?
それか、TFTPの規格でも参考にしたらどうよ?
04854782006/01/30(月) 01:02:51
>>482
あはは、ばればれっすな。
ECHOサーバ以外には簡単な送受信プログラムをメンテナンスしたことくらいしかありません。

>>484
TFTPですか。調べてみます。
……なんだ、やりたいことはほぼこれですね。サーバはSolarisかLinuxだからtftpdを使えば
tftpクライアントを実装するだけな気が……
0486デフォルトの名無しさん2006/01/30(月) 10:03:20
>>485
既製でいいなら、TFTPクライアントをインストールすればいいジャマイカ
0487デフォルトの名無しさん2006/01/31(火) 09:14:57
VSC++2005EE落としてこれからC言語覚えようと思い、
なにか本でも買おうかと思うのですが、
CができないとC++覚えるのはきついでしょうか。
あとWin32APIについても別に本を買って覚えた方がいいんでしょうか。
0488デフォルトの名無しさん2006/01/31(火) 09:21:07
>>487
とりあえず本読め
後のことはそれから考える。
0489デフォルトの名無しさん2006/01/31(火) 09:27:13
Express Editionか、Enterprize Editionかと一瞬思ってびびった
0490デフォルトの名無しさん2006/01/31(火) 09:28:00
もとい、Enterprise
0491デフォルトの名無しさん2006/01/31(火) 21:51:18
>>487
C++からいきなり覚えてもよいと俺は言いたいのだが、
世の中の大半のC++の入門書はCができることを前提にしているから仕方がない。
0492デフォルトの名無しさん2006/01/31(火) 22:06:15
そこでAccelarated C++ですよ。
04934922006/01/31(火) 22:06:55
訂正。Accelerated C++
0494デフォルトの名無しさん2006/02/01(水) 04:30:07
Cに対応した正規表現パッケージはありませんか?
0495デフォルトの名無しさん2006/02/01(水) 04:31:19
>>494 ありますよ。
0496デフォルトの名無しさん2006/02/01(水) 07:53:46
相対パスを格納した文字列から
絶対パスを格納した文字列を得るポータブルな方法はありますでしょうか?
Visual C++ だと _fullpath() という関数があるのですが、
他の環境でも使えるような方法があれば教えてください。
0497デフォルトの名無しさん2006/02/01(水) 08:01:54
Visual C++ では ANSI 標準関数には _ なしの名前が、
ANSI非標準の関数には _ 付きの名前が割り当てられています。

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

Visual C++ / cygwin / Linux でポータブルなプログラムを
書きたい私は getcwd と _getcwd のいずれを使うべきでしょうか?
0498デフォルトの名無しさん2006/02/01(水) 08:13:43
・どっかからポータブルなライブラリを拾ってくる。
・自分で作ってそこに環境依存な処理を隠蔽する。
0499デフォルトの名無しさん2006/02/01(水) 08:45:52
MSDN Library を呼んでいると、

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

と書いてあるのですが、 _getcwd って ISO C++ 準拠なんでしょうか?
0500デフォルトの名無しさん2006/02/01(水) 10:17:42
>>497
マクロで一方の表記に統一する
0501デフォルトの名無しさん2006/02/01(水) 10:28:24
やっぱマクロ使って表記統一ですか。
皆様ありがとうございました。
ちなみに余談ですが、プラットフォーム間パスの表記の違いは
boost::filesystem::path で切り抜けることにしました。
0502デフォルトの名無しさん2006/02/01(水) 11:01:36
int_ntop,inet_ptonはスレッドセーフなのでしょうか?

環境は以下の通りです。
Redhat Linux カーネルver 2.4.21
gcc 3.2.3
0503デフォルトの名無しさん2006/02/01(水) 17:19:28
Windowsの編集ボックスでIMEの変換をすると、
1単語変換するごとに100KBほどメモリリークするようなのですが、
これは何とかならないのですか?
同じ単語を変換してもメモリ使用量は増えないので、キャッシュと見ることもできますが、
それでも、何千単語も変換されるうちにメモリ使用量が数百MB増えてしまいます><
根本的な解決にならなくてもいいので、何か回避策を教えてください。
0504デフォルトの名無しさん2006/02/01(水) 17:22:52
>>503
C/C++と何の関係があるのか?と小一時間(ry
0505デフォルトの名無しさん2006/02/01(水) 17:42:23
>>503
ついでに、おまえは実際何千単語も変換してメモリ使用量の変移を確認したのか?と小一時間(ry
05065032006/02/01(水) 18:29:47
プログラムを最小化したらなぜか開放されました。
その線で探ってみます。
>>505
いやまじです。新しい単語を次々変換していくと、本当に100KB程度ずつメモリ使用量が増えていきます。
0507デフォルトの名無しさん2006/02/01(水) 18:49:39
だから実際に何千単語もやったんかと
0508デフォルトの名無しさん2006/02/01(水) 18:55:17
メモリー使用量なんぞでメモリーリークを検出できると思ってる馬鹿はほっとけ。
0509デフォルトの名無しさん2006/02/01(水) 18:57:01
ていうか、最小化で解放されてるんだからリークではないわな。
05105032006/02/01(水) 19:00:26
どうやらWindowsのWorkingSetという仕組みが絡んでるようでした。
なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
SetProcessWorkingSetSizeで強制的に全て開放させられるのですが、必要なメモリもスワップされちゃうので、
もうちょっとましなやり方がないか探してみます。

>>508
必要ないメモリを開放しないこと=メモリリークと思ってましたが微妙に違うようですね><
0511デフォルトの名無しさん2006/02/01(水) 19:05:11
>>509
最小化しないアプリを作ってるんです><
というか定期的に最小化するアプリを作るわけにはいかないので・・・。

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

たとえリークでも、一度プロセス終了して起動しなおせば開放されますけどね・・・。
0512デフォルトの名無しさん2006/02/01(水) 19:35:19
>>511
「無駄なメモリーの使用」かどうかは君が判断することじゃない。
05135032006/02/01(水) 19:41:41
>>512
どうしてもWindows用の高効率アプリを作りたいので、自分で判断したいのです><

予約してるメモリだけを開放する関数はないのだろうか・・・。
0514デフォルトの名無しさん2006/02/01(水) 19:59:30
一時的に巨大なメモリを割り当てて故意にスワップを起こさせたら
メモリの空きが増えるかも(メモリクリーナの動作原理らしい)
でもCPU使用率が上がるから効率悪いがwwww
05155032006/02/01(水) 20:23:34
>>514
SetProcessWorkingSetSizeで使用量をほとんど0にできるのですが、
負荷が大きすぎるし、必要なメモリまでスワップされてスローダウンするので、
予約してるメモリだけ開放できる方法がないか探してます。
0516デフォルトの名無しさん2006/02/01(水) 21:34:38
>>514
そんなことしたら、別のプロセスで必要なメモリがスワップに追いやられたり、
仮想メモリと物理メモリのアドレスのキャッシュも消えたりして、いいことなんてまったくないと思うが。


>>515
IMEと同じものを、自分で実装したまえ。
そこまで気にする貴方なら、
さぞかしすばらしくメモリ効率のいいものを、実装できるはずだ。
0517デフォルトの名無しさん2006/02/01(水) 21:37:32
>リークではないけど、他のプロセスがメモリを使いたくても使えなかったり、
>システム自体が重くなるので、無駄なメモリの使用は避けたいのです。
そのへんはOSがよきにはからってくれるので気にするな。

>なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
メモリを1バイト単位で管理してるわけじゃないからね。
ページサイズ分はどうやっても確保されるんじゃね
0518デフォルトの名無しさん2006/02/01(水) 21:54:21
>>487氏ではないけど、Express Edition落としてVC始めようと思ってるんだけど、
誰かVC#2005EEとVC++2005EE、どっちがどう違うのか教えてくれ(´д`υ

MS-DOS上でMSCv6扱ってたことはあるんだが、Win+VCとなると使ったこと無いので差が判らんなりよ。。
0519デフォルトの名無しさん2006/02/01(水) 21:55:42
教えてクンは氏ね
0520デフォルトの名無しさん2006/02/01(水) 21:59:55
>>518 何が違うって言語が違うじゃん。
0521デフォルトの名無しさん2006/02/01(水) 22:07:40
>>518
どの言語かもわからんやつが来る場所ではない
初心者以前じゃ
05225032006/02/01(水) 22:22:21
>>516
激しくめんどくさそうですが、IMEを自作すれば色々とメリットがあるので、
その線で検討してみます。
05235032006/02/01(水) 22:45:34
IMEを自作するくらいなら編集ボックスを自作した方が簡単そうなので、
こっちにします。
文字列変換が必要になったら別プロセスを立ち上げ、変換が終わったらそのプロセスを終了する。
これで無駄なメモリ使用とおさらばできるはずです。
05245032006/02/01(水) 22:53:27
プロセスの起動と終了を繰り返すのも効率が悪いから、
文字列変換用のヘルパープロセスは起動しっぱなしで、
変換が終わったらSetProcessWorkingSetSizeでメモリ開放した方が効率いいかな。
0525デフォルトの名無しさん2006/02/01(水) 22:54:12
つ[チラシの裏]
0526デフォルトの名無しさん2006/02/01(水) 22:55:12
ちょっと待ちなさい。
あなたのような潔癖症の人間は、OSから作った方がよいと思われます。
0527デフォルトの名無しさん2006/02/01(水) 23:06:20
というか、釣りでなければ、思考が80年代だぞ。

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

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

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


やはり>>503は、OSから自作すべきだと思うよ。
05285032006/02/01(水) 23:12:59
>>527
「必要になるまで、物理メモリを割り当てたまま放置するような設計」
というのは理解できるのですが、
いざ必要になったときの処理がものすごく適当なので、その設計には頼りたくないのです。
というかOSの設計者はメモリが不足したときのことをぜんぜん考えてない気がします。
0529デフォルトの名無しさん2006/02/01(水) 23:19:46
XPあたりで一番物理メモリくわえ込んでるのはファイルキャッシュだったりするがな。
おかげでウィルスキャッシュとかGoogle DesktopみたいにHDDスキャンするアプリがキャッシュ無効せずに走ると一気にメモリが枯渇する
0530デフォルトの名無しさん2006/02/01(水) 23:23:00
>>529
あるある、
DVD焼いたりしたりすると、起動中のアプリとか、どんどんスワップアウトしていきやがる。
ほんとアレ何とかならんのかね?
05315032006/02/01(水) 23:28:13
>>530
64bit版のOSにしてHDDの数倍のサイズのメモリを積んどけばいいのでは?
05325032006/02/01(水) 23:31:08
すいません冗談です><
ディスクキャッシュのサイズを制限するか無効化すれば良いと思います。
XPでどうやるのか知りませんが。
0533デフォルトの名無しさん2006/02/01(水) 23:37:55
Itaniumなんか使ってられっか!
0534デフォルトの名無しさん2006/02/02(木) 00:08:20
>>532
結局のところスワップアウトが嫌なら、ページファイル無効にしとけばいいんじゃないの?
0535デフォルトの名無しさん2006/02/02(木) 00:19:12
>>503
さっきから訳の解らないこと行ってるんじゃネェヨ!
てめぇの言っている現象はリークじゃねぇ、
と皆さんが言っているのに、何故聞き入れないのだ?
05365032006/02/02(木) 00:24:27
混沌としてるなー・・・。
0537デフォルトの名無しさん2006/02/02(木) 00:27:30
>503はLinux使うと虫唾が走るんじゃなかろうかw
0538デフォルトの名無しさん2006/02/02(木) 00:31:52
なんでそこまでメモリ使用量にこだわるかな・・・
0539デフォルトの名無しさん2006/02/02(木) 00:34:31
503は病気なんです、皆さん温かい目で見守ってください
05405032006/02/02(木) 00:36:42
スレが荒れてしまってすいません><
0541デフォルトの名無しさん2006/02/02(木) 00:37:54
マジレスすると、ATOK2004はDOS窓でメモリリークするバグがあったはず。
ATOK2005にしてからは直っている。もうすぐ2006も出るし、FEP変えるとか。
05425032006/02/02(木) 00:42:31
>>534
>>531と>>532は>>530へのレスなんですが、
ページファイルを無効にすると、結果的にディスクキャッシュの使用を抑えられるということですか?
0543デフォルトの名無しさん2006/02/02(木) 04:54:06
いったいなんて言うツールでメモリ使用量見てるのさ。
>>503 が「メモリ消費」っていってるのは、おそらく
>>503 が脳内でイメージしているメモリ消費とは違うと思うんだが。
0544デフォルトの名無しさん2006/02/02(木) 05:54:22
>>543
お前の脳内イメージはどうでもいいよ
0545デフォルトの名無しさん2006/02/02(木) 09:55:48
>>541
> FEP

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

# 漏れもFEPの方がしっくりくるが。
05465032006/02/02(木) 23:19:30
SetProcessWorkingSetSizeの最小と最大に、
GetProcessMemoryInfoで取得したページファイル使用サイズ(こっちが本当に必要なメモリサイズらしい)を指定したら、
不要なメモリだけ開放できたっぽいのでこっちでいきます。
うまく動作しなかったら、またヘルパープロセスでIMEを操作するやり方にしますが。
簡単な解決策が見つかって良かった><
0547デフォルトの名無しさん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
とググッてもなかなか見つからない。
やはり無いのでしょうか。
0548デフォルトの名無しさん2006/02/04(土) 19:47:48
>>547
やはり環境依存のコードを書くしかないんじゃないかな。

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

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

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

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

どの様な環境にも耐えられるように
>>549案でチャレンジしてみます。
有難うございました。
05515472006/02/04(土) 20:15:59
boost C++ Libraries
英語が読めんとです・・・

ここは自分でポインタを
しっかり管理するしかないですな
ひと段落したら boost をやっちみます
0552デフォルトの名無しさん2006/02/04(土) 20:18:12
>551
ttp://boost.cppll.jp/HEAD/
0553デフォルトの名無しさん2006/02/04(土) 20:23:45
>>551
ttp://www.kmonos.net/alang/boost/
05545472006/02/04(土) 20:47:19
>>552-553
おお!日本語サイトですか有難うございます

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

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

という事でいいんでしょうか。
わからないのが”ライセンス交付金”という奴なのですが
0555デフォルトの名無しさん2006/02/04(土) 20:54:14
boostのライセンスに、特に気にするような部分なんてあったかな。
商用でもOKで、ソース公開の義務もないし、
boostを手本にして書いたコードは、勝手に自分独自のライセンスにしてOKだったはず。
05565472006/02/04(土) 21:11:48
>>555
そうだったのですか。
小難しく考えすぎました。
05575472006/02/05(日) 00:13:50
boostの威力を堪能
おかげさまで、コードが綺麗になりました

数々の情報有難うございました。
0558デフォルトの名無しさん2006/02/06(月) 06:59:13
GNUのindentみたいなソース整形ツールの、
GUI風に使えるソフトがありましたら教えてください。
0559デフォルトの名無しさん2006/02/06(月) 09:38:37
Windows XP & Borland C++ 5.02Jでデータ処理アプリケーションを作っていますが、
バッファを確保しようとするとAccess violationエラーが発生します。

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

1GもRAMを搭載しているのに60万バイトのメモリブロックすら確保できないのは
なぜでしょうか。
0560デフォルトの名無しさん2006/02/06(月) 09:47:58
>>559
16bitモードで使ってるのと違う?
0561デフォルトの名無しさん2006/02/06(月) 09:54:18
32ビットモードでコンパイル・実行しています。
念のためコンパイラのオプションでヒープサイズを変えられないか調べてみましたが、
それらしい設定項目は見当たりませんでした。
ひょっとして.defファイルの中でヒープに関する設定をする必要があるのでしょうか。
0562デフォルトの名無しさん2006/02/06(月) 10:21:07
>>559
マジレスすると、確保できる量はだいたいOSと、コミットできるメモリ量で決まる。
WindowsXPなら、何もいじらなければおおよそ2GBまで確保できる(スワップ
ファイルを含む)

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

それと、5.02Jは古いC++なので、bad_allocを返さないので、pBufが
0だったら確保に失敗しているよ。
0563デフォルトの名無しさん2006/02/06(月) 10:49:31
.DEFのHEAPSIZEは、省略時は4096、つまり4Mバイト。
今は 4 × 150000 = 600000 バイト必要なんだから、HEAPSIZEを
1000000 くらいに設定してみてはどうか。
0564デフォルトの名無しさん2006/02/06(月) 10:58:21
久しぶりに5.02Jの分厚いマニュアルを出して来たので、頭が混乱してる。

600000バイトって600Kバイトだから、デフォルトで足りそうなんだが・・・・
0565デフォルトの名無しさん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()の中でもメンバーには手をつけてないのにこのエラーが出るのはなぜなのでしょうか?
0566デフォルトの名無しさん2006/02/06(月) 11:11:58
関数間でデータを受け渡す場合これでいいんでしょうか?
char* test(){
 return "koredeiinokana"; //←本当はデータを取得するから大きなデータ
}
void main(){
 printf(test());
}
ポインタを直接渡していいのかいまいち自信がありません。
0567デフォルトの名無しさん2006/02/06(月) 11:13:36
>>566
test()が返す文字列の中に書式指定文字列があると、
変な事になるぞ。
05685992006/02/06(月) 11:19:20
レス、どうもです。

>>562
unsigned* pBuf = new unsigned[150000]; // ここでエラー発生
を
static unsigned pBuf[1000000]; // 4M byte
としたらエラーは発生しませんでした。

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

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

うーん訳わからん。原因追求するよりは素直にC++Builderあたりに移行した
方が速いのかも。
0569デフォルトの名無しさん2006/02/06(月) 11:23:50
>>568
変ですねえ。コマンドラインであっても、GUIベースであっても、
基本的には同じはずなんですが。

staticで確保できるって事は、ヒープ領域は問題なさそうですね。
5.02Jインストールしてあるマシンが手元にないので、はっきりした
事は言えないのですが、記憶では、何もしなくてもそのまま動作
したような記憶があります。
0570デフォルトの名無しさん2006/02/06(月) 11:30:24
>>568
アプリによって動作が変わるんなら、エラーの出るほうでヒープをぶっ壊してるんだろう。
0571デフォルトの名無しさん2006/02/06(月) 11:33:59
>>565
int Complex::im() だと this の型は Complex* になる。
この場合は Complex const* を受け取るようにメンバ関数の宣言(定義)を変えればいい。

int Complex::im() const ...
int Complex::re() const ...
0572デフォルトの名無しさん2006/02/06(月) 12:20:50
>>571
なるほど… constを関数宣言の最後につけるんですね。
新しい文法をまた学びました、ありがとうございます。
0573デフォルトの名無しさん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;
}
}
05745732006/02/06(月) 15:18:01
忘れてましたがコンパイラはborlandの物を使っています。
0575デフォルトの名無しさん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; 
05765752006/02/06(月) 15:23:28
つまりこの部分のiが狂ってるってことな
for(n=0;n<i;n++){ 
05775732006/02/06(月) 15:31:40
レスありがとうございます。
うかつでした・・・
しかし、書き換えてみたのですがやはりメモリが増え続けてしまいます。
グローバルでの宣言が駄目なのでしょうか?
0578デフォルトの名無しさん2006/02/06(月) 15:40:55
>>577
どう書き換えたの?
こっちではその部分の書き換えでリークは無くなったけど。

あと無理してnewしなくてもstd::vector使ったほうが良いと思うよ
0579デフォルトの名無しさん2006/02/06(月) 16:17:25
タスクマネージャのメモリー使用量で確認してる痛い子ってだけだろ?
0580デフォルトの名無しさん2006/02/06(月) 16:19:11
int main(){
print
}
05815732006/02/06(月) 16:26:36
とりあえずその部分のiをnに変えてやってみました。
std::vecterを試してみます。
0582デフォルトの名無しさん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;
    }
}
0583デフォルトの名無しさん2006/02/06(月) 17:03:02
>>559
Windowsでそんなに大量のメモリを確保するのなら、
直接VirtualAllocを呼ぶほうがよい。
05845992006/02/07(火) 11:55:48
>>583さん
レス有り難うございます。
VirtualAllocについては初めて知りました。ただ件のアプリの場合は、同じコードを
コマンドラインで実行するとエラーになり、GUIではならないことから>>570さんの
ご指摘の通りどこかで不正な処理を行っていると思われます。もっとも特定は
かなり難しそう。と思っていたら、あれれ、おかしいぞ

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

この二行をコードの随所で実行してどこでエラーが生じるか調べていたんですが、
配列の長さを即値で渡しているときにはエラーにならないのに、
int len = 1000000;
int *p = new int[len];
と配列長を変数で渡すとエラー発生。はて?
0585デフォルトの名無しさん2006/02/07(火) 12:14:02
ヒント:intが2バイト
0586デフォルトの名無しさん2006/02/07(火) 12:38:59
Borland C++ 5.02Jのintは4byteだった希ガス。
16bitコード吐けたっけ?
0587デフォルトの名無しさん2006/02/07(火) 12:40:24
>>585
559 に「Windows XP & Borland C++ 5.02J」とあるから、さすがにそれは無いと思うよ。
0588デフォルトの名無しさん2006/02/07(火) 13:08:59
>>586
16bitコード吐けるけど、デフォルトは32bitだよ。
デバッガ走らせてCPUウィンドゥを開けばすぐわかる。
05895592006/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は使い方を間違うと大変ですね。
0590デフォルトの名無しさん2006/02/07(火) 13:46:42
>>589
お前馬鹿か?
strtok以前にここで問題に気づけ。
char* pchBuf = new char[param.length()]; 
strcpy(pchBuf, param.c_str()); 

#といっても俺もこのミスたまにやるんだよなぁ
0591デフォルトの名無しさん2006/02/07(火) 13:51:54
いい加減Cの文字列処理関数はまとめて捨てろ。
0592デフォルトの名無しさん2006/02/07(火) 14:57:15
ヌルターミネータの領域を考慮する癖は
絶対につけておかねばな。
0593デフォルトの名無しさん2006/02/07(火) 15:05:47
char* pchBuf = new char[param.length() + 1];
param.copy(pchBuf, std::string::npos);
pchBuf[param.length()] = 0;
が正解かな
なんか長くてうっとうしいな
0594デフォルトの名無しさん2006/02/07(火) 15:10:08
char* pchBuf = strcpy(new char[param.length()+1],param.c_str());
0595デフォルトの名無しさん2006/02/07(火) 15:27:04
strdup
は奨めちゃいかんな
0596デフォルトの名無しさん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;
}
0597デフォルトの名無しさん2006/02/07(火) 15:38:37
>>589=559
始めから、そのコードを晒しておけば、すぐに解決したものを…
どうして問題が再現する最小のコードを貼らないのか…
0598デフォルトの名無しさん2006/02/07(火) 15:39:11
いや、freeとdelete[]が変わるというのと
bad_allocを投げない(要NULLチェック)というのもあるし。
特に前者は忘れがちだし。

newを使ってbad_allocを投げる関数を自分で作ればよいだけなんだけどね。
0599デフォルトの名無しさん2006/02/07(火) 15:43:56
あーなるほど。自分は元の定義を尊重して、
mallocにしてたけどC++だと逆に余計なお世話だな

確かにnew[]したほうが良いか。
0600デフォルトの名無しさん2006/02/07(火) 21:36:44
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;
0601デフォルトの名無しさん2006/02/07(火) 22:12:58
はじめまして
半年前からCの勉強をしていてひと段落したのでC++に進もうと思っております

オブジェクト、クラスなどのことがわかりやすく書いてある参考書などおありましたあ教えていただけないでしょうか?
よろしくお願いいたします
0602デフォルトの名無しさん2006/02/07(火) 22:19:23
スレ違い。書籍スレ行け
0603デフォルトの名無しさん2006/02/07(火) 22:20:25
>601

推薦図書/必読書のためのスレッド PART29
http://pc8.2ch.net/test/read.cgi/tech/1138179810/
0604デフォルトの名無しさん2006/02/07(火) 22:24:37
>>603
サンクス
0605デフォルトの名無しさん2006/02/08(水) 13:02:53
とあるサンプルコードをながめているのですが、

STDMETHOD(hoge)(THIS_ LPCSTR foo);

の、STDMETHODとTHIS_ってのはどういう意味でしょうか?
文法的にも、型の前に更になんかくっついているのははじめてみたのですが、
ググってみてもこれらを当然のように使っているサンプルコードとかしか引っかかりません。
なるべく平易に教えていただけると嬉しいです。
0606デフォルトの名無しさん2006/02/08(水) 13:07:50
・質問者は必ず、環境を書きましょう。
・ぐぐった?
06076052006/02/08(水) 13:13:23
環境はVC++6です。
0608デフォルトの名無しさん2006/02/08(水) 13:30:49
COMインターフェースのメソッド
定義はヘッダファイルあると思う。
0609デフォルトの名無しさん2006/02/08(水) 13:36:48
>>605
おそらくCOM/OLE関係のマクロで手元のVC++7.1だとObjBase.hで定義されてるものだろう。

基本的にはCとC++でCOM/OLEのインターフェイス定義を共有するための小細工。
詳しく知りたければCOM/OLE関係の解説書でも読め(Inside OLEとか)
0610デフォルトの名無しさん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の呼び出し関数の引数と戻り値に 構造体を使用したいのです。
よろしくお願いします。
06116052006/02/08(水) 14:02:03
>>608>>609
サンクスコ。
0612デフォルトの名無しさん2006/02/08(水) 15:00:38
>>610
http://pc8.2ch.net/test/read.cgi/tech/1136690107/724
0613デフォルトの名無しさん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);

のどちらでもできると思うのですが、
わざわざ前者を使う意味があるのでしょうか?
0614デフォルトの名無しさん2006/02/08(水) 17:35:48
>>613
SendMessage  → Win32API
GetDlgItemText → MFC
0615デフォルトの名無しさん2006/02/08(水) 17:52:06
>>614
スッキリしました
ありがとうございます
0616デフォルトの名無しさん2006/02/08(水) 18:07:14
open関数で開いたファイルがeofであるかどうか調べるにはどうしたらいいですか?
0617デフォルトの名無しさん2006/02/08(水) 18:22:02
>>616
_eof
0618デフォルトの名無しさん2006/02/08(水) 19:12:04
>>617
Windows上のようですが、UNIXの場合どうしたらいいですか?
0619デフォルトの名無しさん2006/02/08(水) 19:42:21
>>618
lseek(SEEK_END)で返ってくるバイト数が
直前に呼んだlseekに渡したバイト数以下ならeof。
0620デフォルトの名無しさん2006/02/08(水) 19:43:08
>>619
ありがとうございます。
0621デフォルトの名無しさん2006/02/08(水) 20:31:30
>614
GetDlgItemTextはAPIにもあるよ。
0622デフォルトの名無しさん2006/02/08(水) 20:41:42
SendMessageに比べて引数が省略される代わりに
関数名に入っている感じかな。
0623デフォルトの名無しさん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は使えないけどね。
0624デフォルトの名無しさん2006/02/09(木) 02:13:55
プロンプトでプログラム実行すると、
目にも止まらぬ速さで窓が自動的に閉じてしまいます。
解決するにはどうすればよいのでしょうか?

ちなみにC++です。
0625デフォルトの名無しさん2006/02/09(木) 02:16:29
>>624
動体視力をもっと鍛えるんだ!!!
0626デフォルトの名無しさん2006/02/09(木) 02:37:46
>>624
まず、キーボードを良く見よう。

そう、あるはずだ。
PrintScreenと書かれたキーが。

あとは分かるな?
0627デフォルトの名無しさん2006/02/09(木) 03:07:46
>>624
system("pause");
0628デフォルトの名無しさん2006/02/09(木) 03:21:45
>>625-627
サンクスコ!
0629デフォルトの名無しさん2006/02/09(木) 04:03:43
>>625-627
ワラタ
他にはreturnの前にgetchar();もしくはコマンドプロンプトでその
フォルダに移動してから、コマンドプロンプトで実行
0630デフォルトの名無しさん2006/02/09(木) 10:45:15
>>623

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

VBからの引数はchar*で宣言を行い。
623さんの、やり方を行ったところうまくいきました。
0631デフォルトの名無しさん2006/02/09(木) 10:56:53
IDE からなら Ctrl + F5 とかどうよ。
0632デフォルトの名無しさん2006/02/09(木) 14:20:19
inlineって、プロトタイプに付ければいいんですか?
それとも、関数本体に付ければいいんですか?
0633デフォルトの名無しさん2006/02/09(木) 14:25:01
おでこに付けるといいよ。
0634デフォルトの名無しさん2006/02/11(土) 02:06:41
インリンって、、、
0635デフォルトの名無しさん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++では可能なのでしょうか?
0636デフォルトの名無しさん2006/02/12(日) 04:46:48
可能です。
0637デフォルトの名無しさん2006/02/12(日) 05:31:57
>>636
可能だということが分かったのでEssential C++とThinking in C++を
もう1回隅々まで読んでヒントを探してみます。
ありがとうございます。
0638デフォルトの名無しさん2006/02/12(日) 05:56:21
ヒント:ポインタや参照は、それを使って実際に参照を行うコードが出てくるまでは、不完全型でも良い
0639デフォルトの名無しさん2006/02/12(日) 06:17:28
#define h_Wrld
class People; // Peopleクラスの宣言
class World{
     中略
};

class People { // Peopleクラスの定義
     以下略
0640デフォルトの名無しさん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 を受け取っています。

何かスマートな方法があればよろしくお願いします。

0641デフォルトの名無しさん2006/02/12(日) 11:31:22
サブクラス化
0642デフォルトの名無しさん2006/02/12(日) 12:32:50
すいません、初心者なんですが。最近C言語の勉強を始めました。
本を見ながら学んでいるのですが、char型変数は漢字を表現できるのでしょうか?
コンパイルしても、文字化けするのですが。教えてください、よろしくお願いします。
0643デフォルトの名無しさん2006/02/12(日) 12:44:03
>>642
charは無理。char*なら環境依存。wchar_tなら確実。
0644デフォルトの名無しさん2006/02/12(日) 12:50:34
さっそくありがとうございます。たぶん本が間違っているのだと思います。
もう一冊の本にはできないと書いてありました。ダウンロードしたファイルも
間違っているのみたいですね・・・本選びからはじめます。ありがとうございました。
0645デフォルトの名無しさん2006/02/12(日) 13:15:05
>>644
漢字はどの漢字コードでも最低2バイト。
char型はsizeofすればわかるけど1バイト。
入るわけがない。
char[]やchar*な文字列は2文字分にまたがって格納できるからOK。

あと間違っても
char str[16];
str = "漢";とかstr = '漢';などとやらないように。
0646644です2006/02/12(日) 13:25:50
>>645
すいません、全くわからないです。まだ始めたばかりで、char*というのは
なんでしょうか?この本のは

char moji1='本';

という感じなんですけど。環境がいけないのでしょうか?

0647デフォルトの名無しさん2006/02/12(日) 13:27:20
これは酷い。

始めたばかりで分からないのは当然。
しばらく進めてから質問汁
0648デフォルトの名無しさん2006/02/12(日) 13:34:15
>>646
本当にそのまんま書いてあるならそのファイル作った香具師殴り殺していい。
0649デフォルトの名無しさん2006/02/12(日) 13:36:27
実はJavaの本だと予想してみる
0650644です2006/02/12(日) 13:42:03
C言語の本なんですが。もう少し勉強してみます。すいませんでした
0651デフォルトの名無しさん2006/02/12(日) 14:13:04
まず本のタイトルを晒してみようか
0652デフォルトの名無しさん2006/02/12(日) 14:16:44
「図解入門 よくわかる最新C言語の基本と仕組み」です。
0653デフォルトの名無しさん2006/02/12(日) 14:24:46
独習Cの方が良くないか?猫でも〜よりはましだと思うが、まっ個人の自由だけどな
0654デフォルトの名無しさん2006/02/12(日) 14:26:18
まず壁紙用に時計つくればいいよ。
0655644です2006/02/12(日) 14:32:12
XPで Borland C++ Compiler 5.5 です。

char moji2='本'
printf("%c",moji2);

というやり方ではできないですよね?なんどもすいません
0656デフォルトの名無しさん2006/02/12(日) 14:43:42
char moji2='h';
0657デフォルトの名無しさん2006/02/12(日) 14:58:35
本も間違ってるし、サンプルも間違い
0658デフォルトの名無しさん2006/02/12(日) 15:33:45
>>655
日本語だのやりたいなら、char*がなんなのか分かるようになってからだ
0659デフォルトの名無しさん2006/02/12(日) 15:36:04
本には
char moji2='A'
printf("%c",moji2);
とかって書いてあるのに
644が勝手に2バイト文字を突っ込んで動かないってほざいてるだけだろ、たぶん
0660644です。2006/02/12(日) 15:50:18
本には
char moji2='言';
と書いてあります。
確かに漢字が使われており、「c言語」と表示しようとしています。
うそではないです。ご迷惑をかけてすいません。勉強します。
0661デフォルトの名無しさん2006/02/12(日) 16:00:01
いくらなんでもそんな無能が本書くわけないだろw
数学の計算ミスとかそんなレベルでなく、それがネタでなくて
ガチだったら池沼もいいとこ。
0662デフォルトの名無しさん2006/02/12(日) 16:02:33
char str[] = { 'h', 'e', 'l', 'l', 'o' };
と初期化すれば6バイト割り当てられておまけに最後に'\0'で初期化されると書いてあった
「はじめてのC++」並にひどいな
0663デフォルトの名無しさん2006/02/12(日) 16:02:57
ネットでもサンプルおとせますよ。本当にうそではないです。
0664デフォルトの名無しさん2006/02/12(日) 16:04:33
その本で勉強するのマジやめとけ。

「入門書としてはほかのものと同じようなレベル。
ただ、本文中のコードに多くのミスが見受けられた。
このようなミスは入門者には混乱のもととなるはず。
あまり親切な作りとは言い難い。」
ttp://www.rentalserver-hikaku.jp/books/data/4798002836/
0665デフォルトの名無しさん2006/02/12(日) 16:08:08
凄いな。そんな本があるんだ。
折角買った本でも、時間を無駄にして役に立たない知識をつけるより
ずっといいよ。
0666デフォルトの名無しさん2006/02/12(日) 16:16:57
ありがとうございます。違う本で勉強します。読み始めたばっかで
間違いに気づいて良かったです。サンプルも間違えていて、信じていただけて
うれしいです。ありがとうございました。
0667デフォルトの名無しさん2006/02/12(日) 16:30:30
一体なんて言う本ナンダ?
0668デフォルトの名無しさん2006/02/12(日) 16:50:56
>>667
>>664に出てるだろ?
0669デフォルトの名無しさん2006/02/12(日) 16:56:32
図解入門 よくわかる最新C言語の基本と仕組み―標準C言語プログラミング教本
How‐nual Visual Guide Book

秀和システム2002/03

横田 一輝 の検索結果
 Illustrator文書作成術
 住所録のデータを年賀状ソフトに変換できる本
 しっかりわかるコントロールパネル―Windows98/98SE編
 事例引き Access「クエリ」ハンドブック
 PCサーバのしくみ 入門ビジュアル・コンピューティング
あとJAVA,C#本が数冊
0670デフォルトの名無しさん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
0671デフォルトの名無しさん2006/02/12(日) 17:01:21
いくらなんでも糞過ぎるだろ
詐欺じゃね?
0672デフォルトの名無しさん2006/02/12(日) 17:03:11
なんかアプリの本とJava本ばかりだな。
最近はC#の本を出してる。

Cの本はこれ以外にないから、あまり期待できんな。
京都造形芸術大学の講師らしい。
0673デフォルトの名無しさん2006/02/12(日) 17:06:18
そもそも畑違いの人間かよ
0674デフォルトの名無しさん2006/02/12(日) 17:06:34
あの意味不明なCM流してる所か
糞っぽい大学だなと思ってたらやっぱり中の人も同レベルか
0675デフォルトの名無しさん2006/02/12(日) 17:07:15
図解入門 よくわかる最新C言語の基本と仕組み の正誤表
http://www.shuwasystem.co.jp/books/7980/0283-6/0283-6.html

これを見る限り、根本的な誤りには気付いてなさそうだな。
0676デフォルトの名無しさん2006/02/12(日) 17:12:10
専門学校のバイト講師以外じゃねぇか
0677デフォルトの名無しさん2006/02/12(日) 17:12:47
横田が京都を中心に運営してるらしい会社(?)

http://www.f-site.com/

■代表者プロフィール

横田 一輝(よこた かずき)

1965年大阪府生まれ名古屋育ち
通産省情報処理試験対策の教員としてコンピュータ専門学校に勤務後、SEとしてメーカーの社内システム構築などに従事。
現在は関西フリーサイト代表として、大学,専門学校講師、パソコン関連本の執筆活動、システム開発など様々な分野で活動中。
・中高教員免許(社会)
・情報処理�T種技術者
0678デフォルトの名無しさん2006/02/12(日) 17:18:07
旧I種ってFEの方か?あんなのプロフィールに書くほどの物じゃねーだろ
0679デフォルトの名無しさん2006/02/12(日) 17:18:27
>>663
サンプルってここにある奴か?
http://www.f-site.com/down.html

で、問題のサンプルはどの.lzhだ?
0680デフォルトの名無しさん2006/02/12(日) 17:21:55
>>678
旧I種別は今のSWに対応しているようだ。
0681デフォルトの名無しさん2006/02/12(日) 17:24:38
>>680
あぁFEは旧II種の方か
しかしこんな奴が取れるとはな
0682デフォルトの名無しさん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);

}
0683デフォルトの名無しさん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);
}

ひでぶ!!
0684デフォルトの名無しさん2006/02/12(日) 17:55:50
ありえねぇ・・・
しかもreturnしてねぇし・・・

こんなヤツがよくI種取ったりSEやったりできたな・・・
0685デフォルトの名無しさん2006/02/12(日) 18:10:22
>>684
I種はC言語を知らなくても取れるし
0686デフォルトの名無しさん2006/02/12(日) 18:36:56
>>679の圧縮ファイルのホストOSが、MS-DOSになっているんだが……。

コンパイラはLSI-Cか……。
とても2002年に書かれた本とは思えない。
0687デフォルトの名無しさん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を渡すにはどうやればいいんでしょうか?
0688デフォルトの名無しさん2006/02/12(日) 18:43:18
何回同じ質問を見たか・・・
0689デフォルトの名無しさん2006/02/12(日) 18:51:04
初心者歓迎って書いてたもので聞いてみたのですが、
何度同じ質問見たかしりませんが、この程度のことは答えるまでもなく、
実質初心者歓迎のスレではどうやらないみたいなので、
もうちょっとあれこれいじくってみます。
0690デフォルトの名無しさん2006/02/12(日) 18:52:22
質問です
構造体で
struct hito{
char name[20];
int nenrei;
};
hito human[2];
をファイルにテキスト形式で下記のように書き出したり読み込んだりしたいのですが
"namae1";15
"namae2";16
どのようにすればいいのでしょうか?
"と;を追加するのと、読み込みのときの識別の仕方がわかりません
0691デフォルトの名無しさん2006/02/12(日) 18:52:55
>>687,689
せめて、自分はどうやったらいいと思ったのか、
そしてやってみたらどんなエラーが出たのか、
これぐらいは用意してから質問してくれ。
0692644です。2006/02/12(日) 19:07:35
みなさんありがとうございました。
これからは、よく調べてから本を買います。
質問しなかったら、えらいことになってました。
ご迷惑かけてすいませんでした。
0693デフォルトの名無しさん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 ; //この型は?
06946932006/02/12(日) 19:23:06
書き忘れてた。
&ary ; //この型は、char (*)[10]
0695デフォルトの名無しさん2006/02/12(日) 20:49:27
個別のメンバ関数の解説ってヘッダファイルに書くのが普通?
それともcppファイルに書くのが普通?
0696デフォルトの名無しさん2006/02/12(日) 20:51:45
ヘッダファイル
0697デフォルトの名無しさん2006/02/12(日) 21:43:39
>>687
何この関数

>>690
fprintfを調べてみろ
そこから先は自分で考えろ
0698デフォルトの名無しさん2006/02/12(日) 22:02:00
>>687
「二次元配列」と「1次元配列へのポインタの配列」の違いを考えろ

256x128要素の二次元配列は、32768個のデータが隙間なく並んでいる。

128要素の1次元配列への256要素のポインタ配列は、

・128個のデータが隙間なく詰まった配列が
・どこだか分からないけど合計で256個あって
・それぞれの配列の先頭アドレスが
・256個のポインタが隙間なく詰まった配列に記録されていて
・そのポインタ配列の先頭アドレスがchar** hogeとなる

ってこと。
0699デフォルトの名無しさん2006/02/12(日) 22:12:08
>>687
char *pszStars[128];
for( int i = 0 ; i < 128 ; ++i ){
  pszStars[i] = szStars[i];
}
test(pszStars);
0700デフォルトの名無しさん2006/02/12(日) 23:42:07
>>645
別にcharが16bit以上あるような環境があってもおかしくないが。
0701デフォルトの名無しさん2006/02/12(日) 23:53:12
>>700 入門書で断りも無く超環境依存ヤバス
0702デフォルトの名無しさん2006/02/12(日) 23:53:46
誰がbitの話してるよ?
0703デフォルトの名無しさん2006/02/12(日) 23:54:33
bitとbyteを混同すんなや
07046902006/02/13(月) 00:17:17
>>697
ありがと、しかしわからなかったので
strtokとかいうの使ってできました。

手持ちの本どれにもこの関数は載ってなかった

0705デフォルトの名無しさん2006/02/13(月) 00:25:14
K&R C第2版でも買っとけというのは言い過ぎになってしまうのだろうか。
0706デフォルトの名無しさん2006/02/13(月) 00:49:23
そもそも1byte=8bitと決め付けること自体が間違い。
0707デフォルトの名無しさん2006/02/13(月) 00:54:13
そうだね。だから入門書でchar型に16bit入れたっていいよね。
0708デフォルトの名無しさん2006/02/13(月) 07:57:56
横田一輝ってすげーこのスレ向きの奴だな。
0709デフォルトの名無しさん2006/02/13(月) 08:15:04
実は C# だったり。
0710デフォルトの名無しさん2006/02/13(月) 08:21:17
訂正どうだすかな
0711デフォルトの名無しさん2006/02/13(月) 12:29:58
はじめて2chを使う者です。
既出だったりスレ違いだったら申し訳ありません。
初歩的なことだと思うのですが、
C++で、
class A{
B* b;
};
class B{
A* a;
};
みたいな事をしたい場合どうすればいいのでしょうか。
コンパイルするとB*って何?みたいなエラーが帰ってきてしまいます。
0712デフォルトの名無しさん2006/02/13(月) 12:32:12
>>711
class B;
class A{
B* b;
};
class B{
A* a;
};
0713デフォルトの名無しさん2006/02/13(月) 12:33:34
どうもありがとうございます
0714デフォルトの名無しさん2006/02/13(月) 12:39:15
>>711 激しく既出だが、やさしい人がいてよかったな。
0715デフォルトの名無しさん2006/02/13(月) 14:03:38
>>711
ただ、こういう構造になってしまうのは、設計でなにかがまずいんだ。
こういうの普通に考えてありえないでしょ?
他人のプログラムの改変とかで、こっちのが楽だっていうならいいが、
これが新規で作って出てきたクラスだとしたら、あまりにもセンスが無いw
0716デフォルトの名無しさん2006/02/13(月) 17:58:41
>715
んなこたーない
0717デフォルトの名無しさん2006/02/13(月) 18:24:12
>>716
そうだってw
こんなチグハグな設計になるわけないだろw
自分が馬鹿なの自慢しにくるなよw
0718デフォルトの名無しさん2006/02/13(月) 18:52:15
ケースバイケースって言葉しらないんだろうな
>>711のまんまならおかしいけど
色んな要素がある中で
そういう循環参照になるのは
ありがちだよ
そういうこともしないで
ムダな関数処理してるプログラマのがバカ
0719仕様書無しさん2006/02/13(月) 20:14:32
>>717
あんたが構造体やテンプレートのArrayやListで済むような単純なデータしか
扱っていないからだろ。
0720デフォルトの名無しさん2006/02/13(月) 21:34:37
>>719
それで済むようにできるのが俺のプログラムの上手さだと思ってる。
業界でもっとも複雑であろうゲームを作ってきた俺が必要なかったのに、
業務でアホなコード組んでるお前が複雑なデータなんて扱う必要があるわけない。
無理だというならそれがお前の限界。
0721デフォルトの名無しさん2006/02/13(月) 21:55:46
>>720
うむ。同意だが、ageてると説得力半減だ。
0722デフォルトの名無しさん2006/02/13(月) 22:10:07
2行目で笑いをとるためにageたに決まってるだろ。察してやれよ。
0723デフォルトの名無しさん2006/02/13(月) 23:22:42
語尾にwを多用するやつの説得力は通常の半分以下
0724デフォルトの名無しさん2006/02/13(月) 23:32:04
ハイハイw
そんな糞設計してて自分が正しいと思ってんのねw
オブジェクト指向は現実にある構成をそのままプログラムに反映できる設計よ。
この世にそんな構造のもんなんて存在しないでしょ?
自分が間違えてるのわかりそうなもんだけど。
まあ、馬鹿だからしょうがないかw
技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。
悲しいねぇw
0725デフォルトの名無しさん2006/02/13(月) 23:36:07
>>724
それはやりすぎだ。
誰も釣れないぞ。
0726デフォルトの名無しさん2006/02/13(月) 23:37:08
>>724
> この世にそんな構造のもんなんて存在しないでしょ?

世の中、人間の知っている事より知らない事の方が多いのに、
よく恥ずかしげも無くそんな事言えるね。

> 技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。

自己紹介乙
0727デフォルトの名無しさん2006/02/14(火) 00:03:10
>>726
はぁ?反論しようとするのはいいけど、自分の話をどう進めるかぐらいはできるようにしてくれよ。
てか、お前、俺のレスにどこに噛み付いて、どう否定したくて、自分はどう考えてるか?すら伝わってこねぇぞ。
頭悪すぎだろ。つか、日常生活で人とまともに会話できてる?

最近、>>726みたいなのって多くなったな。
なんか、宇宙人みたい。これがゆとり教育の弊害か?
張り切って釣りしようと思ってきたのに日本語しゃべれないんじゃしょうがない。さらば!
本読めよ!数学頑張れ!
0728デフォルトの名無しさん2006/02/14(火) 00:08:42
反論しようとしてないだろw
ただ煽ってるだけ見える。
0729デフォルトの名無しさん2006/02/14(火) 00:13:17
>>724は各センテンスのつながりがおかしいように思う。
プログラムもいいけど、たまには小説でも読もう。
0730デフォルトの名無しさん2006/02/14(火) 00:17:41
>>727
> 本読めよ!

オマエガナー
0731デフォルトの名無しさん2006/02/14(火) 00:18:26
読んでも無駄な希ガス
0732デフォルトの名無しさん2006/02/14(火) 00:30:41
>>727
よく、こんな狭い視野してPG出来るなぁ…。
0733デフォルトの名無しさん2006/02/14(火) 00:51:25
>>732に言われたら終わりだなw
PGとしてじゃなく人として。哀れ>>727www
0734デフォルトの名無しさん2006/02/14(火) 00:58:07
同じゲームプログラマとして恥ずかしいよ。
0735デフォルトの名無しさん2006/02/14(火) 02:38:38
ゲームプログラマはみんな恥ずかしいだろ。
0736デフォルトの名無しさん2006/02/14(火) 08:04:22
まぁなぁ。技術がありそうで無く、精神的に余裕に至っては皆無。
そんなヒビの入った歯車みたいな奴が多数だし。
0737デフォルトの名無しさん2006/02/14(火) 08:51:06
相互参照や循環参照くらい時々なら出てくると思うが。
まぁなんとかそれを解消させようとするんだけど、無理な場合も。
修論で知識ベースからの推論やってたときに、結構泣いた。
0738デフォルトの名無しさん2006/02/14(火) 10:17:59
自分ひとりで全部やるなら、そういう自信も持てるだろうが、
人が作ったものを利用しつつ、作ったものをまた人に利用させるような場合
そういいきれるものでは無いのだよ
0739デフォルトの名無しさん2006/02/14(火) 13:15:33
僕は君を知ってる。
君は僕を知ってる。
循環参照。
0740デフォルトの名無しさん2006/02/14(火) 13:20:42
だよな。
かたっぽだけだと、ストーカーだよな。
0741デフォルトの名無しさん2006/02/14(火) 13:21:19
リファレンスカウントされてるオブジェクトって、
「もう、ほっといてくれよ」とか
一瞬でも思ったりしないんだろうか。
0742デフォルトの名無しさん2006/02/14(火) 15:28:18
windowsアプリをつくっています。
タスクトレイにアイコンを表示して常駐するソフトを作成中です。
タスクトレイにアイコンは表示できたのですが、ウィンドウの透明化ができなくて
困っています。
ウィンドウの透明化はどのように行うのが一般的ですか?
0743デフォルトの名無しさん2006/02/14(火) 15:30:54
おれはCWnd::ShowWindow() つかってっけど
07447422006/02/14(火) 15:36:15
>>743
レスありがとうございます。
もう少し詳しく教えてください!
0745デフォルトの名無しさん2006/02/14(火) 15:37:35
MSDNで調べろよ
0746デフォルトの名無しさん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);

こんなことやってるなあ、、、どれが効いてるんだっけ。
0747デフォルトの名無しさん2006/02/14(火) 15:55:06
とりあえず、>>743のCWndは忘れろ
ShowWindowだけ調べとけ
07487422006/02/14(火) 16:02:31
みなさんありがとうございます。
ShowWindowの引数にSW_HIDEを入れたらできました。
0749デフォルトの名無しさん2006/02/15(水) 00:54:38
>>739
それはオブジェクトなのか?
そもそも、オブジェクト指向が理解できてないな。

あくまで「物」が主体なんだよ。

循環参照ができてしまうなんてのは未熟の証明でしかない。
そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?
物体Aの構成要素に物体Aがあるってことだぞ。
すでに破綻してる。
こんな脳みそでプログラムなんて組んだら破綻するのも当然。
オブジェクト指向をちゃんと勉強しろ。
0750デフォルトの名無しさん2006/02/15(水) 01:01:14
>>749
プ!

オブジェクトが物って誰が決めたんだよ。おまえの脳内理解のレベルが
その程度ってことだけは、よ〜く判ったよ。
0751デフォルトの名無しさん2006/02/15(水) 01:06:44
>>749 参照と包含ぐらい区別しようぜ。
0752デフォルトの名無しさん2006/02/15(水) 01:13:13
初心者なんですが、業務用ソフト等のプロテクト解除を教えてほしいのですが。

0753デフォルトの名無しさん2006/02/15(水) 01:14:39
>>752
ローカルルールより
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
0754デフォルトの名無しさん2006/02/15(水) 01:16:15
>>750
お前こそわかってねぇな。
こうやって作れば絶対に破綻しないんだよ。
0755デフォルトの名無しさん2006/02/15(水) 01:17:05
現実にない構成をむりやり構築しようとするから複雑になってしまうのさ。
0756デフォルトの名無しさん2006/02/15(水) 01:52:08
>循環参照ができてしまうなんてのは未熟の証明でしかない。
>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?

AさんはBさんの電話番号を知ってる。BさんはAさんの電話番号を知ってる。
互いに相手に電話をかけてメッセージを送ったり何か仕事してもらったりできる。
たまに「おかけになった電話番号が使われておりません」ってことになるかも。


普通だな。
0757デフォルトの名無しさん2006/02/15(水) 01:55:36
>>756
ちがう。
そもそも電話番号なんてクラスになりえない。
オブジェクト指向でいえば電話番号なんて物じゃない。

クラスにしたとしても最適化のためだったり設計に結びつくようなものにはならない。

てめーはホントに頭悪いんだな。
0758デフォルトの名無しさん2006/02/15(水) 02:01:35
class ニワトリ
{
  class タマゴ* 自分が出てきたタマゴ;
};

class タマゴ
{
  class ニワトリ* 自分を産んだニワトリ;
};
0759デフォルトの名無しさん2006/02/15(水) 02:10:25
> 循環参照ができてしまうなんてのは未熟の証明でしかない。
> そもそも現実にそんな物体が存在するのか?
> この世にそんな物体が存在できるのか?

GNU is Not UNIX
0760デフォルトの名無しさん2006/02/15(水) 02:13:48
>>749
>物体Aの構成要素に物体Aがあるってことだぞ。

class ノード
{
  リンク* 右;
  リンク* 左;
};

class リンク
{
  ノード* 右;
  ノード* 左;
};
0761デフォルトの名無しさん2006/02/15(水) 02:16:24
>>757
お前さんは本当に頭が悪くていらっしゃる。
0762デフォルトの名無しさん2006/02/15(水) 02:17:13
>>759
それは循環参照じゃなくて無限再帰。
0763デフォルトの名無しさん2006/02/15(水) 02:46:08
ついでだからPHP Hypertext Preprocessorも置いておく
0764デフォルトの名無しさん2006/02/15(水) 03:57:38
変数のポインタに1を足したらその変数の型のサイズ分だけ進むそうですが
int *i; i++;

じゃ関数のポインタは?
int *(unko)(); unko++;
この場合int分進むの?ってことはこのintの部分は別にcharでもdoubleでも好きなの勝手に入れていいの?
それともunkoに指させる予定の関数の返り血の型にあわせとく必要があるの?もしそうならなんのため?ですか?
0765デフォルトの名無しさん2006/02/15(水) 03:58:52
ああ宣言しただけで値代入してないや。気にしないでください
0766デフォルトの名無しさん2006/02/15(水) 04:22:25
>>764
どうでもいいが、
int (*p)() だろ


もちろんそれは、変数の型( int (*)(void) )のサイズだけ進む。

具体的に言うと、
sizeof(p) == sizeof(int (*)(void)) == //処理系依存


MSVCなら、ポインタはすべて4バイト

0767デフォルトの名無しさん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ですか?
0768デフォルトの名無しさん2006/02/15(水) 06:42:00
>>758-767
はぁ?なんの話してんだ?お前等?
まともな思考回路脳みそにねーの?
プログラムなんて組むだけ無駄だから止めちまえ。
0769デフォルトの名無しさん2006/02/15(水) 06:46:48
>>764-765>>767
はオイラですがそれより上の人は知りませんよう
0770デフォルトの名無しさん2006/02/15(水) 08:02:45
>>768
反論できないけど黙ってるのも悔しいからとりあえず火病、
という追い込まれた状況はよく理解できたから、もう来なくてもいいですよ。
0771デフォルトの名無しさん2006/02/15(水) 08:44:04
PHP (PHP: Hypertext Preprocessor)を無限ループにせずに展開する方法をおしえてくだしあ
0772デフォルトの名無しさん2006/02/15(水) 09:24:51
>>757
>> AさんはBさんの電話番号を知ってる。BさんはAさんの電話番号を知ってる。
>> 互いに相手に電話をかけてメッセージを送ったり何か仕事してもらったりできる。
>> たまに「おかけになった電話番号が使われておりません」ってことになるかも。
>
> そもそも電話番号なんてクラスになりえない。
> オブジェクト指向でいえば電話番号なんて物じゃない。

確かに、電話番号のクラスはなり得ないかもしれない。
しかし、「Aさん」「Bさん」はオブジェクトだろ?
「Aさん」「Bさん」は現実に存在するものなのだから。
そして、「Aさん」「Bさん」はお互いの事を知っている、
と言う事は、現実にあり得る事だ。
0773デフォルトの名無しさん2006/02/15(水) 09:27:25
何かにたとえてる奴ってアフォなの?
どんな禁じ手だって、強引にたとえればいくらでもたとえられるだろw
0774デフォルトの名無しさん2006/02/15(水) 09:35:19
# 739 :デフォルトの名無しさん :2006/02/14(火) 13:15:33
# 僕は君を知ってる。
# 君は僕を知ってる。
# 循環参照。
#
# 749 :デフォルトの名無しさん :2006/02/15(水) 00:54:38
# >>739
# それはオブジェクトなのか?
# そもそも、オブジェクト指向が理解できてないな。
# あくまで「物」が主体なんだよ。

「君」や「僕」はオブジェクトだと思うが…。
そうか、>>749はこの世に存在しないのか!
0775デフォルトの名無しさん2006/02/15(水) 09:38:49
GUIで子ウィジットが親ウィジットのハンドル(もちろん逆も)を持つなんてのはよく見るケースだよ
0776デフォルトの名無しさん2006/02/15(水) 09:58:57
メタファによって理解が深まることはよくあることだよ。
あるいはメタファなしにはなにも理解できないと言っても過言ではない。
コンピュータ関連の用語はほとんどそれ以外の世界の言葉の借用であることからも
何と無く類推できよう。
0777デフォルトの名無しさん2006/02/15(水) 10:27:16
>>773
無能は例え話しかできないんだよ。語録不足だから。
0778デフォルトの名無しさん2006/02/15(水) 11:01:22
>>773
何か存在しないとか言い切ってる奴ってアフォなの?
どんな有用な構造だって、強引に否定すればいくらでも無視できるだろw
0779デフォルトの名無しさん2006/02/15(水) 11:01:58
日本語でおk
0780デフォルトの名無しさん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

よろしくおねがいします。
0781デフォルトの名無しさん2006/02/15(水) 12:00:03
>>780
Unmanagedな奴なら従来のとほとんど互換性有ると思うがそれでもダメなのか?
0782デフォルトの名無しさん2006/02/15(水) 12:11:10
XML DOMいじるライブラリなら C++ の物がいくつもあるから
それを使うっていうてもあるし、C++/CLI で .NET Framework
の中の類似のクラスを使うっていうてもある。

とはいえ俺も自分じゃ XML ほとんど使ってないから
口だけだけど。アプリの設定ファイルとかにXML つかってるけど
XML 読み書きできるシリアライザ呼び出してるだけだし。
0783デフォルトの名無しさん2006/02/15(水) 14:05:25
レスありがとうございます。

>>781
Unmanaged で一向に構いませんので、
参考書籍やURL等紹介していただけると、助かるのですが。


>>782
VC++6.0 から、.Net Framework って、使えるのでしょうか?
ご指摘の方法、もう少し調べてみます。
0784デフォルトの名無しさん2006/02/15(水) 14:56:33
>>783
>VC++6.0 から、.Net Framework って、使えるのでしょうか?

混乱させてしまったようで済みません。使えません。
VC++ 6.0 についているのは C++ コンパイラだからです。
VC++ 2005 についている C++/CLI コンパイラなら使えます。
0785デフォルトの名無しさん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>
0786デフォルトの名無しさん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.
0787デフォルトの名無しさん2006/02/15(水) 19:01:11
>>786
つまりそのコンパイルするのにヘッダとかが必要なのは分かるのですが、
ではぜlibのプロジェクトでコンパイルする時には必要ないのか?
という理屈が分からないのです。
0788デフォルトの名無しさん2006/02/15(水) 19:05:45
つーかRSSの読み込みならともかく書き出しぐらい自分でやれよ。大した手間でもねーだろ。
0789デフォルトの名無しさん2006/02/15(水) 19:10:58
>>787
libのプロジェクトからwin32アプリに持っていった時に、
設定が変わっているからじゃないの?
0790デフォルトの名無しさん2006/02/15(水) 19:25:24
>>789
ども。リンクの設定かなとか思ったんですけど、
libのプロジェクトの方はそもそもリンクの設定するところがないみたいです。
ライブラリとかインクルードファイルの設定はプロジェクトが変わっても一定ですし。。
他にどこか設定する所ってのはおもいうかびませんです。すいません。
0791デフォルトの名無しさん2006/02/15(水) 19:28:36
>>774
はぁ?
「知っている」状態を表すのにどうしてオブジェクト自体を内包するの?
そもそも素質ねーんだよお前。

例えば、「俺」オブジェクトと「お前」オブジェクトがあったとして
「俺」が存在することで「お前」のプログラム自体に直接影響を与えちまうのはそもそもおかしい話なんじゃねーか?

こういう頭が無いってところですでにオブジェクト指向を理解できる見込みが全く無い。
さっさとプログラマなんて辞めちまえ。
0792デフォルトの名無しさん2006/02/15(水) 19:31:01
>>749
>あくまで「物」が主体なんだよ。 
>
>循環参照ができてしまうなんてのは未熟の証明でしかない。 
>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか? 

つまり、オブジェクト指向プログラミングでは
現実に存在する「もの」しかプログラミング対象に
ならない、と・・・

いやぁ。実に斬新な説だな。
0793デフォルトの名無しさん2006/02/15(水) 20:08:04
そもそも最初の話題はオブジェクトを内包じゃなくて互いのポインタをメンバとして持つだけの話だったよね。
>712辺り。
0794デフォルトの名無しさん2006/02/15(水) 20:10:45
>>791 内包するなんて言ってないじゃん。
参照って言ってるのに・・・・
0795デフォルトの名無しさん2006/02/15(水) 20:13:45
抽象概念なのに、現時世界に存在するものでしか考えられないのはナンセンスというか低レベル。
0796デフォルトの名無しさん2006/02/15(水) 20:14:02
StateパターンのContextとWindowって循環参照の関係にならないか?
あとはVisitorとか。
0797デフォルトの名無しさん2006/02/15(水) 20:16:59
一般に、オブジェクトのインターフェースと
実装方法の分離という理念を
しっかり体得出来ていない人が、

「参照を持っている->他のオブジェクトを包含する」

という安直な発想に陥りやすい。
0798デフォルトの名無しさん2006/02/15(水) 20:16:59
そういったデザパタでも、インタフェース継承等を使って、いるから直接的には
コード上は互いを参照しているようには見えない。
それをもって、「循環参照していない」と勘違いしている未熟者がいるのかもしれないけどな。
0799デフォルトの名無しさん2006/02/15(水) 20:38:06
>790
コンパイルエラーなんだろ? ならリンクは関係ない。
インクルード関係にどこか違いがあるはず。
0800デフォルトの名無しさん2006/02/15(水) 20:47:35
>>794
はぁ?ちゃんと読めよ。
俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
合わせてソースを書き換える必要があること自体おかしいって言ってんの。
ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。

そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
つまり、100X100の一万件分ソースを書くということか?
苦労だけ一丁前で全然金にならないなw

すっげ馬鹿が変に噛み付いてくる予防線として書いておくけど
ここでvoid*もしくはそれに近いものを使って、とっかえひっかえポインタ使いまわしても
(そもそもひとつのポインタを使いまわして複数のインスタンスを出し入れするなんて危険なことした時点でそいつはいらない)
俺は同じくそいつに「プログラマ辞めろ」という。
0801デフォルトの名無しさん2006/02/15(水) 20:50:53
>>800
>はぁ?ちゃんと読めよ。 
>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに 
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。 
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。 

いやぁ、いくら読んでも
やっぱり判らないや(w
0802デフォルトの名無しさん2006/02/15(水) 20:55:03
>>800
>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。

何でいちいちソース書き換える必要あるの?
双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。
0803デフォルトの名無しさん2006/02/15(水) 20:56:11
class A : protected B {

}
0804デフォルトの名無しさん2006/02/15(水) 21:00:26
どうでもいけど、C++だとオブジェクトじゃなくて、クラスかインスタンスって書いたほうがよくないか?
俺オブジェクトとお前オブジェクト云々ってのは、インスタンスじゃないよね?
クラスという意味でオブジェクトって言葉使っているのなら、ちょっとアレだ。
0805デフォルトの名無しさん2006/02/15(水) 21:03:53
class A : protected B {
   中略
};

protected で継承した B の public メソッドの一部だけ、
A の public メソッドとして外から見えるようにするには
どうすればいいですか?

同名のメソッドを作ってスルーするしかありませんか?

void A::foo() {
    B::foo();
}

みたいに。
0806デフォルトの名無しさん2006/02/15(水) 21:05:31
>>805
一部だけを見えるようにする言語仕様はありません。
書いているようにするのが一番単純な方法。
0807デフォルトの名無しさん2006/02/15(水) 21:07:44
>>800
>そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
>つまり、100X100の一万件分ソースを書くということか?
>苦労だけ一丁前で全然金にならないなw
C++にはtemplateがあるって知ってるかい?
templateを使えば「俺」に対するX、「お前」に対するYのコード、
つまり100*2のソースで十分だ。

事実STLは、データ構造の件数*アルゴリズムの件数の定義があるんじゃなくて、
templateを使い、データ構造の件数+アルゴリズムの件数しか定義せずに済ましている。

君のように阿呆みたいなコード量の爆発は起きない。
0808デフォルトの名無しさん2006/02/15(水) 21:11:00
>>806 そうですか、ありがとうございます。

たまに std::vector<T> を継承してちょっぴり
付加機能を付けたコンテナクラスを作ることがあるんですが、
使わないメソッドは隠蔽しておこうとして protected/private
継承すると、結局使いたい一部のメソッドも見えないよなぁ、
って悩んでました。

inline にしたらオーバーヘッドも少なそうだし、
あとはコンパイラの最適化を信じることにします。
0809デフォルトの名無しさん2006/02/15(水) 21:11:17
>>807
>君のように阿呆みたいなコード量の爆発は起きない。

STL はコンパイルすると、実質的なコード量が爆発するんだが・・・
0810デフォルトの名無しさん2006/02/15(水) 21:13:24
>>808
それは継承じゃなくて、集約にしたほうがいい。
0811デフォルトの名無しさん2006/02/15(水) 21:15:34
>>810 private なデータメンバとして
コンテナを保持しとけってことですか?
0812デフォルトの名無しさん2006/02/15(水) 21:17:33
>>805
struct A{void fn(){}};
class B:protected A{
public:
    using A::fn;
};
0813デフォルトの名無しさん2006/02/15(水) 21:20:18
>>812 げ、 using キーワードってそんなことにも使えたんですか。
using namespace OreNo::Kuukan;
しか使ったことなかった・・・
0814デフォルトの名無しさん2006/02/15(水) 21:33:36
正解は、非メンバ関数にすることだな
0815デフォルトの名無しさん2006/02/15(水) 21:35:07
std::vectorって継承して平気なんだっけ?
0816デフォルトの名無しさん2006/02/15(水) 21:37:15
http://www5.atwiki.jp/vc310ice/pages/4.html#id_3cddccf7
0817デフォルトの名無しさん2006/02/15(水) 21:40:35
>810
オブジェクト指向的?にはそうかもしれないけど、
それだと>812みたいに出来ないからなぁ。
まあインライン関数をずらずら並べるのとあまり違いはない気もするが。

>816
いやその理屈はおかしい。
0818デフォルトの名無しさん2006/02/15(水) 21:41:10
>>816
そんな事態を起こさないためのprotected/private継承。
クラス内だけ気を付ければよくなる。
0819デフォルトの名無しさん2006/02/15(水) 21:41:22
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200312/03120016.txt
0820デフォルトの名無しさん2006/02/15(水) 21:41:30
>>816
publicならともかく元の質問はprivate/protectedだろ?
基底クラスのポインタにそもそもキャストできんよ。
だから、その問題はこれとは関係ない。

まぁprotected継承しなくても集約で良いやん的な気分なのは俺もだが
0821デフォルトの名無しさん2006/02/15(水) 21:42:15
>仮想デストラクタのないクラスを継承してはいけない

そんな馬鹿な・・・
盲目的にそう信じるのは馬鹿だと思うぞ。
特にデータメンバに変更が無く、
便利なメソッドを追加するような継承では全く問題がない。
0822デフォルトの名無しさん2006/02/15(水) 21:44:07
データメンバに変更が無く→追加が無く
0823デフォルトの名無しさん2006/02/15(水) 21:45:18
プリミティブなメンバを増やすだけでもダメ?
0824デフォルトの名無しさん2006/02/15(水) 21:56:41
何書いてんのかと思ってたら・・・
>>821
ワロス
どうしてこういう無能がホームページなんか作っちゃうんだろうねぇ
0825デフォルトの名無しさん2006/02/15(水) 22:15:07
まあまあ、821は仮想関数というのを使ったことがないということで
許してやってくれ。
0826デフォルトの名無しさん2006/02/15(水) 22:17:25
双方向リストとかツリーとかあるじゃねーか。
これらが相互参照じゃなく自己参照だと言い張るのはかまわんが、

グラフとかもあるしな。

ジェネティックとかになるとどこがどうつながってるのかは
人には判断できねーよ。
0827デフォルトの名無しさん2006/02/15(水) 22:17:59
ログ更新してから書き込もうな。
0828デフォルトの名無しさん2006/02/15(水) 23:39:14
>>821
正確にはこう。

「publicな非仮想デストラクタを持つクラスから継承してはならない」

それ自体はインスタンスを作らない、派生クラスのための
Mix-inベースクラスとかは、protectedな非仮想デストラクタを持たせる。
0829デフォルトの名無しさん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 したとき、実際の型が基底クラスと違えば
問答無用で未定義動作。

問題が起こらない処理系が多いのが誤解の元だろう。
0830デフォルトの名無しさん2006/02/16(木) 01:12:17
>>816とそのURLの中の人と>>821が無能でFAだろ
いつまでもバカなネタ引っ張るなよ
0831デフォルトの名無しさん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のメモリリークが発生する。
0832デフォルトの名無しさん2006/02/16(木) 01:18:34
>>831
は?「問題が起こらない場面」があるから誤解の元になるんだろ?
0833デフォルトの名無しさん2006/02/16(木) 01:22:54
>>832
それは「問題はあるが実害が無い」場面が多いだけで
「デストラクタが実行されない」というバグは厳然として存在する。

お前みたいなバカがバグを量産してるんだな。
0834デフォルトの名無しさん2006/02/16(木) 01:25:45
>>833
ごめんよ。
君の頭の中で問題と実害が明確に区別されているなんて知らなかったんだ。
0835デフォルトの名無しさん2006/02/16(木) 02:09:45
ちょっと質問です。
もし、仕事でCを使うことになった時、どの程度までできれば役に立てますか?
また、GUIプログラミングもできないとやっぱりキツイんでしょうか・・・?
0836デフォルトの名無しさん2006/02/16(木) 02:21:33
>>835
それはCでなんの仕事をするかで、変わるものと思われます
0837デフォルトの名無しさん2006/02/16(木) 02:24:28
>831
>つまりデータメンバに追加が無くても、
0838デフォルトの名無しさん2006/02/16(木) 03:11:59
まあ、CRect は RECT を継承してるんだけどな。
0839デフォルトの名無しさん2006/02/16(木) 03:26:47
RECT* rect = new CRect;

...

delete rect;

とかやらんでしょ
0840デフォルトの名無しさん2006/02/16(木) 05:07:26
>>802
>何でいちいちソース書き換える必要あるの?
>双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。
はぁ?底無しの馬鹿だな。
基底が同じもんしか循環させないのか?
0841デフォルトの名無しさん2006/02/16(木) 05:10:01
>>807
お前はプログラマ辞めるどころか、もう死んじゃっていいと思うよw
テンプレートの話なんて誰もしてないよ。
だいたい、設計でテンプレートの話なんて出てくる時点で頭おかしい。
0842デフォルトの名無しさん2006/02/16(木) 05:53:38
みんな他人より自分が頭良いって思ってるんだなって事だけは
はっきりわかるスレですね。

うまいとか,うまくねえとか,他人(ひと)のやってるのをきいて,
そういうことを言うについちゃァ,別にモノサシがあるわけじゃァありませんが,
まァ,他人のはなしィきてみて,「こいつァ,オレよりまずいな」と思ったら,
まず自分と同じくらいの芸ですよ。人間にゃ誰だって,
多少のうぬぼれがありますからね。
「オレと同じくれえかな」と思うときは,向こうのほうがちょいと上で,
「こいつァ,オレより,たしかにうめえや」と感心した日にゃァ,
それゃァ,もう格段のひらきがあるもんですよ。
0843デフォルトの名無しさん2006/02/16(木) 06:04:17
>>842
技術で勝てないと知ると別の手段にでるところとか或る意味プログラマ向きだと思うよw
0844デフォルトの名無しさん2006/02/16(木) 06:37:38
>>842
おまいが某氏の blog に出入りしているところまで読んだ
0845デフォルトの名無しさん2006/02/16(木) 07:28:38
まぁどう考えてもこの中じゃ俺が一番頭良いな。
0846デフォルトの名無しさん2006/02/16(木) 09:47:01
オレが2番目だな
0847デフォルトの名無しさん2006/02/16(木) 09:55:54
じゃあ俺は4番目で良いよ。
0848デフォルトの名無しさん2006/02/16(木) 10:25:02
俺は最下位でいいよ。
0849デフォルトの名無しさん2006/02/16(木) 10:56:30
ラッキー! 俺3番
0850デフォルトの名無しさん2006/02/16(木) 11:47:05
このスレは5人しかいないのか
0851デフォルトの名無しさん2006/02/16(木) 12:06:30
遅レス失礼

>>788
おっしゃる通りでして、私も最初は自前クラスで書き出してしまおうと思ったのですが、
RSSのバージョン変化への対応等、将来のメンテナンス性や、拡張性等を鑑みて、
何らかの標準的な物が有るならば、それに乗っておいた方が良いかなと思い、調べていた次第です。

今回は、VC++6.0用に、自前でサックリと書き出しルーチンを作っておいて、
将来APIが、.NETなり、2005なりに対応した時点で、
置き換えられる様にコーディングするつもりです。

レスありがとうございました。>各位
0852デフォルトの名無しさん2006/02/16(木) 14:13:08
9×9の数独の問題を再起呼び出しを使って解くプログラムを作ってるんだけど、誰か指針をお願いします。
0853デフォルトの名無しさん2006/02/16(木) 14:15:45
http://pc8.2ch.net/test/read.cgi/tech/1139053955/953
0854デフォルトの名無しさん2006/02/16(木) 14:29:55
>>853
ありがとうございます
0855デフォルトの名無しさん2006/02/16(木) 16:38:01
>>852
その手のパズルは自分で解く事に意味がある。
0856デフォルトの名無しさん2006/02/16(木) 16:41:16
いやいや、パズルを手で解く楽しみとパズルを解くプログラムを作る楽しみは両立可能だよ?

まあプログラムに問題を解かす作業は特に楽しくないけどな。
0857デフォルトの名無しさん2006/02/16(木) 17:54:53
Visual Studio C++で質問です。
xは150
yは50
[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]
はどうしたら、表示されますか?
0858デフォルトの名無しさん2006/02/16(木) 18:13:47
>>857
puts("xは150\n"
"yは50\n"
"[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]\n");
0859デフォルトの名無しさん2006/02/16(木) 20:48:09
マネージ拡張のC++でwindowsプログラムを作ってるんですが、
#include <ddeml.h> とすると大量にエラー出て使えません。
どうしたら良いでしょうか。
0860デフォルトの名無しさん2006/02/16(木) 21:00:34
だからManaged C++はやめろと
C++/CLIの方がいいと思います
0861デフォルトの名無しさん2006/02/16(木) 21:05:29
>>859
ここはManagedのスレではありません
0862デフォルトの名無しさん2006/02/16(木) 21:35:43
unsigned short型の配列に入ってるデータを
そのままunsigned short型でファイルに出力するにはどうすればいいですか?
fwrite(配列名,sizeof(unsigned short),配列のサイズ,fpw);
↑こうやったら何か正しく出力されなかったんですが・・
0863デフォルトの名無しさん2006/02/16(木) 21:43:33
Windows には バイナリモードとテキストモードの区別がある
0864デフォルトの名無しさん2006/02/17(金) 00:22:52
初歩的な質問ですみません。
別ファイルでも使えるグローバル変数を作りたいんですが
方法を教えてください。
0865デフォルトの名無しさん2006/02/17(金) 00:24:35
>>864
extern
0866デフォルトの名無しさん2006/02/17(金) 00:27:59
ファイルローカルにして、アクセス関数で参照、変更させろ。
08678642006/02/17(金) 01:05:21
>>865-866
早々とありがとうございます。
0868デフォルトの名無しさん2006/02/19(日) 13:13:03
Visual studio .netのコマンドプロンプトを起動して
メモ帳に書いたものを.cppになおしてからファイル名.exeってやってるのに
「内部コマンドまたは外部コマンド操作可能なプログラム
またはバッチファイルとして認識されていません」
ってでるんだけどなんで?
VSを普通に起動して手順通りに進めばできるんだけど
上のやり方で手軽にやる方法はどうしたらいいの?
0869デフォルトの名無しさん2006/02/19(日) 13:15:58
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
0870デフォルトの名無しさん2006/02/19(日) 13:17:08
>>869に先に張られて(´・ω・`)
0871デフォルトの名無しさん2006/02/19(日) 19:16:59
これはひどい
0872デフォルトの名無しさん2006/02/19(日) 19:35:58
インターネッコですね
0873デフォルトの名無しさん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というヘッダファイルをプロジェクトに追加しているのですが…
リンクの仕方にどこか如何わしいところがあるのでしょうか?
0874デフォルトの名無しさん2006/02/19(日) 20:57:21
>>873
implib.exeでインポートライブラリ作ってリンクするかLoadLibrary&GetProcAddressしる
0875デフォルトの名無しさん2006/02/19(日) 21:01:47
インポートライブラリはついてこなかったの?
0876デフォルトの名無しさん2006/02/19(日) 21:40:38
>>874
ありがとうございます!libファイルをバッチで作るものがあるとは知りませんでした。

>>875
VisualCなどのlibはついてたのですが、それだとうまくメイクできなくて…。

作ったlibをメイク環境に追加したらできました。
ありがとう!
0877デフォルトの名無しさん2006/02/19(日) 23:45:42
実行ファイルの大きいアイコン(デスクトップなどに表示されるアイコン)は
どこで指定していますか?
WNDCLASSというhIconというところですか?
0878デフォルトの名無しさん2006/02/19(日) 23:59:37
>>877
というよりEXEファイルのリソース。
WNDCLASS::hIconはそのリソースを使うところ。

WNDCLASS::hIconの中身がEXEのアイコンになるのではなくて、
EXEのアイコンをWNDCLASS::hIconに指定している。
08798772006/02/20(月) 00:45:38
>>878
では、exeのアイコンを替えればいいということでしょうか?
リソースで書けばいいんですよね?
0880デフォルトの名無しさん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
0881デフォルトの名無しさん2006/02/20(月) 09:49:55
>>880
そのconstにどんな意味を持たせたいの?
0882デフォルトの名無しさん2006/02/20(月) 09:50:52
>>880
static ではないメンバ関数では this の型が A* から A const* になるわけだが、
this を持たない static 関数で、どんな効果を期待してるの?
0883デフォルトの名無しさん2006/02/20(月) 10:02:45
>>881-882
static なメンバ変数を変更しない事を明示したいです。
不用意にいじっってるコードがあれば指摘して欲しいです。
0884デフォルトの名無しさん2006/02/20(月) 10:23:00
無理
0885デフォルトの名無しさん2006/02/20(月) 10:33:15
>>883
Get() の中で Set() を呼び出した場合とか、
関数ポインタ &A::Get の型をどうするか?とか、
規格化するにあたって問題が多そう。
0886デフォルトの名無しさん2006/02/20(月) 10:33:50
>883
staticな部分をクラス化して、そのクラスのインスタンスをstaticメンバ変数にでもしたら?
0887デフォルトの名無しさん2006/02/20(月) 15:12:00
配列の初期化ってfor文でやるしかないですか?
たとえば、
char str[100];

//初期化
for (i=0; i<100; i++)
{
 str[i] = NULL;
}

というふうにです。100回もループを回すのはなんかもったいない気がして。
0888デフォルトの名無しさん2006/02/20(月) 15:16:59
>>887
char str[100] = {'\0'};
残りは自動的に '\0' が入る。

というか char に NULL 代入するなよ・・・・
0889デフォルトの名無しさん2006/02/20(月) 15:18:32
>>888
ありがとうございます!
charにNULL代入するのはおかしいですか?
\nは終了コードですよね?
0890デフォルトの名無しさん2006/02/20(月) 15:19:23
・・・・・
0891デフォルトの名無しさん2006/02/20(月) 15:24:46
改行(\n)したっていいじゃない
人間だもの
0892デフォルトの名無しさん2006/02/20(月) 15:30:17
あ、\0でしたすみません。
NULLと\0の違いがよく分かってないんです。
このあたりを書いてあるWEBページもあんまりないみたいで…。
0893デフォルトの名無しさん2006/02/20(月) 15:33:07
一番いいのは規格書を読む事なんだがな。
いい加減な本やサイトが多いし。

しかし個人で規格書を買うと高く付く。学校においてあるPDFを
閲覧するとかすればよい。

JISなら日本語でも読める。
0894デフォルトの名無しさん2006/02/20(月) 15:34:02
あ、間違ったごめん。JISの日本語版なら無料で誰でも閲覧できる。

(後はごにょごにょ
0895デフォルトの名無しさん2006/02/20(月) 15:35:05
やりたいことの意味が通じればよし。
で、やりたいことは
charの配列にヌルポインタを代入したいのか、0で初期化したいのかと言う話だ。
0896デフォルトの名無しさん2006/02/20(月) 15:43:15
ちょっと調べてみた

#ifdef __cplusplus
    #define NULL 0 ←C++の時
#else
    #define NULL ((void *)0) ←Cの時
#endif

あるじゃな〜い
NULLは ただのゼロ
\0は ヌル文字

\0は”改行コード”で調べるといっぱい出るぞ
08978962006/02/20(月) 15:45:18
>\0は”改行コード”・・・
間違えたが反省しない
0898デフォルトの名無しさん2006/02/20(月) 15:58:16
ただのゼロだからといって、ゼロの代わりにNULLを書くのはバカ
0899デフォルトの名無しさん2006/02/20(月) 16:11:04
>893
K&R C第2版読め じゃダメなんかな
0900デフォルトの名無しさん2006/02/20(月) 16:15:00
>>896
NULLはヌルポインタ用。
C++ではvoid*型から他のポインタ型へ暗黙の変換ができないからそうなっているだけ。
ちなみに規格によるとNULLは「処理系定義の空ポインタ定数」となっている。
0901デフォルトの名無しさん2006/02/20(月) 16:39:41
ポインタであろうがなんであろうが 0 を入れておけばよさそうな…。
09028962006/02/20(月) 16:56:19
一応、俺は887じゃないぜ
0903デフォルトの名無しさん2006/02/20(月) 18:20:18
>>887
必ずサイズの分かってる配列ならmemsetでもしてろ

>>896
で、おまいさんの調べたのはWindowsってオチだろ?
NULL = 0なのは代表的な処理系でそうなってるだけで、
NULL = 0とC++が規定してるわけじゃない
0904デフォルトの名無しさん2006/02/20(月) 18:28:20
>>892
> NULLと\0の違いがよく分かってないんです。

\0 → 文字定数or文字列定数中に整数値0を記述するためのエスケープ文字
NULL → 何のオブジェクトも指していない事を示す特別なポインタ値
0905Windows xp home2006/02/20(月) 18:39:34
Windows xp home
irvine1.1.2 のメニューとダイアログが文字化けします。
助けてください。お願いしますッ。
0906デフォルトの名無しさん2006/02/20(月) 18:43:18
>>903
>NULL = 0とC++が規定してるわけじゃない
4.10の1によると、null pointer constant(空ポインタ定数)とは0に評価される整定数式のことだから、
実質的に0だといえるんじゃないか?
#define NULL (1 - sizeof 'h')
みたいなのも許されると思うけど。

>>905
ソフトウェアについての質問はソフトウェア板でどうぞ。
0907デフォルトの名無しさん2006/02/20(月) 18:53:59
>>906
NULL==0は確かに全ての規格合致処理系において保証されてるが
その内部符号は未定義だからそこは分けておいた方がいいだろう
0908デフォルトの名無しさん2006/02/20(月) 20:14:02
>>906
それは、Cソース上で「0」がポインタとして解釈される時、
NULLとして扱われるという事だね。

# つまり、「if( NULL )」が偽となる


>>903が言いたいのは、実行時にNULLのビットパターンが、
「All bit 0であると言う保証はない」と言う事だろう。
0909デフォルトの名無しさん2006/02/20(月) 20:22:38
>>908
必要条件と十分条件が入れ替わってる希ガス
0910デフォルトの名無しさん2006/02/20(月) 22:52:42
いいかげんにしろおまえら。ずっと昔から答えが出てる話をだらだらと。
http://www.kouno.jp/home/c_faq/c5.html
0911デフォルトの名無しさん2006/02/20(月) 23:02:20
ぬるぽインター
0912デフォルトの名無しさん2006/02/21(火) 05:57:19
質問させてください。
よく、メッセンジャやスカイプで、新着通知に下からポップアップウィンドが上がってきますが、あれはどうやって実装しているのでしょうか?
まさか全部自作?

環境は、VC6.0のXPです。よろしくお願いします。
0913デフォルトの名無しさん2006/02/21(火) 07:11:54
自作以外に何があると?
0914デフォルトの名無しさん2006/02/21(火) 08:43:19
ヒント:ウィンドスタイル
0915デフォルトの名無しさん2006/02/21(火) 08:49:37
南南東の風、風力4
0916デフォルトの名無しさん2006/02/21(火) 08:50:26
南の風 風力3
っていう名前のラブホがあったよね。
0917デフォルトの名無しさん2006/02/21(火) 11:35:06
今は無いの?
0918デフォルトの名無しさん2006/02/21(火) 14:10:49
今もあるよ、チェーン店だし。
0919デフォルトの名無しさん2006/02/21(火) 15:22:08
基本クラスAから,クラスB,クラスC が派生しているとします.

クラスBに
vector<int> m_vHoge;
クラスCに
vector<double> m_vHoge;
がそれぞれメンバとして定義されているものとします.

このとき,基本クラスAに,m_vHoge に対して,
vector としての操作をするような関数を
定義するようなことはできますか?

できるならどのようにしたらいいのでしょうか?
0920デフォルトの名無しさん2006/02/21(火) 15:33:21
>>919
仮想関数かテンプレート
09219192006/02/21(火) 15:53:51
>>920
すいません

愚かな私にいま少し具体的に示唆していただければ幸いです
0922デフォルトの名無しさん2006/02/21(火) 16:07:58
プログラムの勉強についての質問ですが、
柴田望洋のC言語 入門編を読んで勉強をしているのですが、
全てのリストを写して実行した方がいいのでしょうか。
演習だけやれば身に付くものなのでしょうか。
他の本にも言えることだと思うので、アドバイスお願いします。
0923デフォルトの名無しさん2006/02/21(火) 16:08:09
class A にその操作をするための関数のインターフェイスだけ書いておく。
もちろん vertual で =0 な純粋仮想関数として。
で、 class B と class C でその関数の中身をを実装する。
忘れないように class A のデストラクタも仮想デストラクタにしよう。

0924デフォルトの名無しさん2006/02/21(火) 16:08:56
>>922 コンパイル、リンク、実行
どんなサンプルでもやってみるのがいいよ。
その本に限らずに。

「わかる」と「できる」は違う。
0925デフォルトの名無しさん2006/02/21(火) 16:09:58
まあその本はあきらめて次を探すほうがいいけどなw
0926デフォルトの名無しさん2006/02/21(火) 16:14:19
>>924
そうですか。じゃあ頑張ってみます。
有り難うございました。
09279192006/02/21(火) 16:29:16
>>923
ロジックがまったく同じで,
型だけが違う,という場合はどうしますか?
0928デフォルトの名無しさん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) ;
}
0929デフォルトの名無しさん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になるのですが、
これは正しい手法でしょうか?
0930デフォルトの名無しさん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))
0931デフォルトの名無しさん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

になっていますか?
0932デフォルトの名無しさん2006/02/22(水) 00:39:12
>>931
なりません
0933デフォルトの名無しさん2006/02/22(水) 00:41:30
>>931
つーかやってみろよ
09349312006/02/22(水) 00:48:34
>>932
&iじゃなくてiですか?

>>933
いまコンパイラが使えないところにいるので…。
カフェでCの宿題しています。
0935デフォルトの名無しさん2006/02/22(水) 00:49:40
ふざけてるのか?
0936デフォルトの名無しさん2006/02/22(水) 01:01:00
>>934
> カフェでCの宿題しています。
これ無理。
0937デフォルトの名無しさん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引数はいったいどのようなものですか?
0938デフォルトの名無しさん2006/02/22(水) 04:22:17
>>937
ネタじゃないなら、文字列操作について勉強してきなさい。
引き数の問題ではなく、コンパイラの言う通り比較の仕方が問題なのだから。
09399312006/02/22(水) 07:21:57
array[8] →123
とかどう見てもネタです、本当にありがとうございました
0940デフォルトの名無しさん2006/02/22(水) 08:46:13
>>937
何のための4番目、5番目の引数だと思ってるんだ。

で
#include<IniFiles.hpp>
TIniFile* ini = new TIniFile(buffer2);
if (ini->ReadString("Test1", "Test2", "Default") != "Default") {
  //
}

こうすればいいとおもうお(;^ω^)
0941デフォルトの名無しさん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'
0942デフォルトの名無しさん2006/02/22(水) 11:34:29
基本クラスで定義したテンプレート関数を
派生クラスの中で使ったら,
リンク時に

未解決の外部シンボル…

となるのですが,なぜでしょうか?
0943デフォルトの名無しさん2006/02/22(水) 11:36:22
>>942
テンプレートの実装はヘッダファイルに書かなきゃダメよ
0944デフォルトの名無しさん2006/02/22(水) 11:37:03
テンプレート関数の定義をソースファイルからヘッダファイル内に移しましょう
0945デフォルトの名無しさん2006/02/22(水) 11:38:10
>>943
結婚してくれ
0946デフォルトの名無しさん2006/02/23(木) 09:24:27
C++で,テンプレートかつ仮想関数というのはできますか?
0947デフォルトの名無しさん2006/02/23(木) 09:25:59
やってみればいいだろ
0948デフォルトの名無しさん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性は無視されると考えてよいのでしょうか?
0949デフォルトの名無しさん2006/02/23(木) 10:09:43
hoge<const int>(n);
ではなく
hoge<int>(n);
にマッチするようになってるから。

そうじゃないとhoge(100)とかもエラーになって困る。
0950デフォルトの名無しさん2006/02/23(木) 10:16:33
>948
コンパイラ何? VC.NET2003ではその通りになるけど
bcc5.5.1ではどっちもコンパイルエラーになる。
0951デフォルトの名無しさん2006/02/23(木) 10:24:26
レスありがとうございます。

>>949
なるほど、組み込み型の値渡しはconst性が無視される仕様である、ということで納得しました。

> そうじゃないとhoge(100)とかもエラーになって困る。
ここがいまいちよく分かっておりません…
(組み込み型の値渡しにconstは無意味である、という問題は無視して考えれば、)
100の型がintであろうがconst intであろうが、どちらでマッチしても問題ないように思えてしまいます。

>>950
VC.net 2005とgcc 3.4.4で確認しました。
0952デフォルトの名無しさん2006/02/23(木) 10:25:36
定数は const int
0953デフォルトの名無しさん2006/02/23(木) 10:29:34
>>952
申し訳ありません(;´Д`)
「100という定数値が、テンプレートでint、const intどちらでマッチしても、」の間違いです…
0954デフォルトの名無しさん2006/02/23(木) 15:20:07
値渡しはconst性が無視されるのか、とか、

値 渡 し っ て 何 か わ か っ て ま す か
0955デフォルトの名無しさん2006/02/23(木) 16:12:40
ええ、あなた程度でも知っているような事はさすがに理解しています^^;;;
0956デフォルトの名無しさん2006/02/23(木) 16:21:20
>>954
constが無意味なのはこの際無視するって書いてあるだろ
テンプレートパラメータの類推が引数部を参考に行われるのか、
呼び出し元の型に準拠するのかが知りたいだけだと思われ
0957デフォルトの名無しさん2006/02/23(木) 16:21:40
ふぁびょーん
0958デフォルトの名無しさん2006/02/23(木) 22:07:38
VBスレかここかで迷ったんですが、こっちに書きます。
VBでは扱えないハードウェアがありまして、CでDLLを作成して
そのDLLをVBで使うようにしたいんですが
普通のCとかで使うDLLと同じように書いても、VBで扱えるのでしょうか?
コールバック関数を登録したりしたいので、ポインタの受け渡しが必要になったりするのですが・・・・。
VBの事良く分からないので、的外れな事書いてるかも知れませんが、よろしくお願いします。
0959デフォルトの名無しさん2006/02/23(木) 22:17:03
MSNメッセンジャーの
タスクバーに出るポップアップウィンドウって、
どうやって出すんですか??
0960デフォルトの名無しさん2006/02/23(木) 22:22:16
>>958
VBというのがver.6以前のことか.net以降のことか分かりませんが、
どちらにせよ、可能です。
0961デフォルトの名無しさん2006/02/23(木) 22:25:17
VBで直接APIが呼べるということ(そのための宣言構文)から類推できそうなもんだけどな
0962デフォルトの名無しさん2006/02/23(木) 22:25:28
>>959
自前
0963デフォルトの名無しさん2006/02/23(木) 23:23:24
>>958
コールバックは無茶。
0964デフォルトの名無しさん2006/02/24(金) 00:01:24
>>963
AddressOfでDLLに渡せるんじゃなかったっけ?
0965デフォルトの名無しさん2006/02/24(金) 07:48:27
渡せりゃいいってもんでもない
0966デフォルトの名無しさん2006/02/24(金) 07:54:22
>>958
公開(エクスポート)する関数もコールバック関数も全てstdcallを使うこと。
0967デフォルトの名無しさん2006/02/24(金) 18:07:00
WinXPでCPU温度を読みたいのですが,
何から手をつければよいかわかりません.
ACPIを使うのだと思うのですが,
参考になるドキュメントなどあるでしょうか?
0968デフォルトの名無しさん2006/02/24(金) 18:27:45
ACPIでググって、日本語英語問わず片っ端から読む。
0969デフォルトの名無しさん2006/02/24(金) 20:14:31
何の助言にもなってないな
0970デフォルトの名無しさん2006/02/24(金) 20:17:52
ドキュメント渡しても絶対作れないに100%
0971デフォルトの名無しさん2006/02/24(金) 20:20:00
>>970にはなw
0972デフォルトの名無しさん2006/02/24(金) 20:26:05
>>967=>>969=>>971乙
0973デフォルトの名無しさん2006/02/25(土) 15:20:35
今回は凄く分かりやすかったな
09749672006/02/25(土) 17:47:46
とりあえず
ttp://www.acpi.info/
このへんを読破しないといけないでしょうか?
DLLをロードして一発というわけにはいきませんか.
0975デフォルトの名無しさん2006/02/26(日) 16:11:55
>>974
http://www.misnet.co.jp/tech/download/opdown.htm
ここの使ったら?
ググったら一番上に来てた。
0976デフォルトの名無しさん2006/02/26(日) 17:16:08
1バイトと3バイトのデータがあり、この二つのデータを1つの4バイトの変数に入れるにはどうしたらいいですか?
0977デフォルトの名無しさん2006/02/26(日) 17:25:06
>>976
ビット演算
0978デフォルトの名無しさん2006/02/26(日) 17:26:53
>>976
struct
0979デフォルトの名無しさん2006/02/26(日) 17:30:36
>>977
シフトとかを使えばいいんですね
0980デフォルトの名無しさん2006/02/26(日) 18:22:33
>>976
unionとビットフィールド
0981デフォルトの名無しさん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 がエラーを返してくれます。
何が原因か分からないでしょうか。
よろしくお願いします。
0982デフォルトの名無しさん2006/02/26(日) 22:06:35
教えて下さい。
C++Builder、VisualC++、VisualC#などがありますが、最も応用範囲が広いのはどれでしょうか?
ドライバ開発、アプリケーション開発、計測制御など、幅広く使える環境を探しています。
0983デフォルトの名無しさん2006/02/26(日) 22:09:46
C++Builder:開発元が売りに出しているC++開発環境
VisualC#:C++ではない言語の開発環境、ネイティブコードは得られない
何をしたいか知らんが、自ずと明らかかと
0984デフォルトの名無しさん2006/02/26(日) 22:13:24
馬鹿が釣れたw
0985デフォルトの名無しさん2006/02/26(日) 22:13:25
社会人とは思えない発言だな・・・
0986デフォルトの名無しさん2006/02/26(日) 22:16:22
>>982
Windowsを使うと言う前提では、最も範囲が広いのはVisual C++かと。
0987デフォルトの名無しさん2006/02/26(日) 22:18:10
自分にとって都合のいい条件をつけて回答する痛い>>986
妄想書き込んでんじゃねーよ
0988デフォルトの名無しさん2006/02/26(日) 22:19:54
ドライバ開発が前提になっている以上選択肢なんぞねーと思うが。
0989デフォルトの名無しさん2006/02/26(日) 22:21:36
>>988
ドライバはどれで作れますか?
09909812006/02/26(日) 22:46:55
分からない・・・。
Win32API スレに行くべきでしょうか?
0991デフォルトの名無しさんNGNG
パワーポインターで作ったスライドってホームページに貼り付けられるの?
0992デフォルトの名無しさん2006/02/26(日) 22:51:30
>>990
それが正解
09939812006/02/26(日) 22:54:51
API スレに行ってきます。ありがとうございました。
09949822006/02/26(日) 23:00:33
早速の回答、有難う御座います。
当方の開発環境を書き忘れました申し訳ありません。
開発環境はWindowsです。

やはり、融通が効くという意味ではVC++という選択になるのでしょうか。
同じC++でも、BCBではどのような点が不利になるのでしょうか。
ご教示願います。
09959822006/02/26(日) 23:03:58
調べたら詳しく書いてあるサイトを見つけました。
申し訳ありませんが、>>994は無かった事にしてください。

お手数お掛け致しました。
0996982 ◆6vyQg.OGAA 2006/02/26(日) 23:10:46
この板は強制IDじゃないんですね。
995は私ではありませんので。
09979822006/02/26(日) 23:13:51
>>996
何でそういう事をするのですか?
やめて頂けませんか?
0998デフォルトの名無しさん2006/02/26(日) 23:14:35
998
0999デフォルトの名無しさん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/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。