【初心者歓迎】C/C++室 Ver.24【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/12/29(木) 12:48:03ただしその場合、質問者は必ず、環境を書きましょう。
※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>>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:300005デフォルトの名無しさん
2005/12/29(木) 13:59:3200065
2005/12/29(木) 14:00:5200076
2005/12/29(木) 14:01:420008デフォルトの名無しさん
2005/12/29(木) 14:06:08そんな便利なものあるなら知りたい。
根性で探すしかないよ
0009デフォルトの名無しさん
2005/12/29(木) 14:07:050010デフォルトの名無しさん
2005/12/29(木) 14:09:25(仕事などでそれが使えるなら)メモリリークを検出するツールを使う。
そうでないならメモリリークを起こしそうなところのコードを読み直すか、
メモリリークの状況を再現できるように維持しつつコードを削って絞り込むか、
アクセス回数を記録できるmalloc()/free()などのダミールーチンで追い込む。
0011デフォルトの名無しさん
2005/12/29(木) 14:17:300012デフォルトの名無しさん
2005/12/29(木) 14:18:100013デフォルトの名無しさん
2005/12/29(木) 14:30:24人間にしかリークと判定できないケースもままあるしね
0014デフォルトの名無しさん
2005/12/29(木) 14:30:570015デフォルトの名無しさん
2005/12/29(木) 14:34:340016デフォルトの名無しさん
2005/12/29(木) 14:34:57void*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:320019デフォルトの名無しさん
2005/12/29(木) 14:43:380020デフォルトの名無しさん
2005/12/29(木) 14:44:470021デフォルトの名無しさん
2005/12/29(木) 14:46:35開放わすれでないやつって
確保領域外のアクセス とか 解放後のポインタをそのまま使ってたり とかの部類?
0022デフォルトの名無しさん
2005/12/29(木) 14:47:32>>4が何を望んでるかわからんだろ?
汎用的な物なのか、環境依存の物なのか。
あれもこれも網羅するのは無駄すぎ。
0023デフォルトの名無しさん
2005/12/29(木) 16:19:11膨らませて無駄話をするも一興
0024デフォルトの名無しさん
2005/12/29(木) 16:27:49#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それはまた話が違う。「解放後のポインタをそのまま使ってたり」
ってのは単に不正アクセス。
アプリとしては要らなくなったデータなのにリストにぶら下げっぱなしに
しているような場合を考えてみれば、機械的に不要かどうかは
判定が難しいでしょ?
002621
2005/12/29(木) 17:14:18アプリ終了時に開放されることは確認できてるけど、
ある作業スパンで見た時に不要になったにも関わらず、開放されず浮遊してるやつ って認識でオケ?
判定も難しいし、ガベージコレクションの分野だねぇ (これはこれで色々ありそうだが…
0027デフォルトの名無しさん
2005/12/29(木) 17:53:56そうそう。アプリ終了時に開放されても仕方がない。アプリが
動いてる時に不要なんだから。
プログラムからいつでも使える状態で忘れてしまっていると、
ガベコレの対象にも出来ない。だからJava使えばリーク問題と
無縁とか思ってるのも間違い。
一番厄介なリークはガベコレがあっても結局は人間がつぶす
しかないんよん。
0028デフォルトの名無しさん
2005/12/29(木) 18:41:23デストラクタがないオブジェクトは、要素の数を知る必要がないから
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:590031デフォルトの名無しさん
2005/12/29(木) 19:23:37外部からsignal。
0032デフォルトの名無しさん
2005/12/30(金) 10:38:410033デフォルトの名無しさん
2005/12/30(金) 12:12:500034デフォルトの名無しさん
2005/12/31(土) 10:43:33Cファイルに関数を宣言してるだけでHファイルで宣言してないのに
他Cファイルからその関数を呼び出せてしまいます
ローカル関数として使いたいのですが…どうしたらよいでしょうか?
0035デフォルトの名無しさん
2005/12/31(土) 10:45:18関数をstaticにする
003634
2005/12/31(土) 10:50:00解決しました・・こんな簡単だとは
ありがとうございます
0037デフォルトの名無しさん
2005/12/31(土) 13:23:020038デフォルトの名無しさん
2005/12/31(土) 15:08:080039デフォルトの名無しさん
2005/12/31(土) 17:19:02CreateWindow にてウィンドウを作成したのですが、
ウィンドウのキャプション部分?(メニューではなく、Windows デフォルトで、ウィンドウタイトルなどが表示される青い部分)が反応しません。
つまり、キャプションを D&D してもウィンドウが動かず、[×] ボタンをクリックしてもボタンがへこむ様子もありません。
(つまり、全く反応がありません。)
考えられる原因はないでしょうか。
ツールバーから「閉じる」を選んだり、Alt+F4 での処理は受け付けれています。
また、[×] をクリックしたとき、WM_LBUTTONCLICK は飛んできているようです。
原因に見等が全くつかないので、どこの部分のソースをさらせばいいのかも分かりませんが、
とりあえずウィンドウの構築部分だけでも示しておきます。
蛇足かもしれませんが、ウィンドウ自体をクラス化しており、
ウィンドウプロシージャはそのクラスの static なメンバ関数です。
このクラスを継承したクラスにてウィンドウを作成したりしているので、
メッセージの処理がうまくいっていない可能性もあります。
よろしくお願いします。
(続く)
004039
2005/12/31(土) 17:19:37WNDCLASSEX 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どっちかっていうとこっちではあるまいか?
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
0042デフォルトの名無しさん
2005/12/31(土) 19:22:34>>41のスレへ移動したうえで、ウィンドウプロシージャの中身も書け
0043デフォルトの名無しさん
2006/01/01(日) 18:35:090044デフォルトの名無しさん
2006/01/01(日) 19:07:13どうせ別の変数で初期化しようとして、
変数の初期化順が不定なもんだから
変になってるだけだとは思うが。
0045デフォルトの名無しさん
2006/01/01(日) 19:34:34組み込み系か? ならそういうケースもあるよ。
0046デフォルトの名無しさん
2006/01/01(日) 19:44:14すいません、今度から関連するコードは出します。。
>>45
ズバリ組み込みです。有り得るケースなのですか。しょうがないので関数内で初期化します
ありがとー
0047デフォルトの名無しさん
2006/01/01(日) 20:01:250048デフォルトの名無しさん
2006/01/01(日) 21:35:38特に理由は無いけども
0049デフォルトの名無しさん
2006/01/02(月) 10:49:00スタートアップがサポートしていない場合もある(ほとんどか)
組み込み系ならmain内で配置new使うのがお手軽だねえ
0050デフォルトの名無しさん
2006/01/02(月) 13:42:540051デフォルトの名無しさん
2006/01/02(月) 18:56:28#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:44unicodeとか関係ねー
bが未初期化。
適当な配列を宣言してその先頭アドレスを代入するか、動的確保してください
0053デフォルトの名無しさん
2006/01/02(月) 20:19:55とかやってる時点でおわっとる
0054デフォルトの名無しさん
2006/01/02(月) 21:38:13別にそれ自体は問題ないがな
読み取り専用の文字列を作るのに普通に使うし
0055デフォルトの名無しさん
2006/01/02(月) 22:18:40何も問題ないが
0056デフォルトの名無しさん
2006/01/02(月) 22:19:450057デフォルトの名無しさん
2006/01/02(月) 22:35:20JavaScriptの"Window.open()"とかで新しくウィンドウが開いたときに
IEが開いてしまって、それにセッションが引き継がれないようで、
SSL通信を行っている場合に正常に通信できなくなってしまいます。
何かいい対処方法は、無いでしょうか。
また、実装方法について参考になるサイトとかありましたら教えてください。
0058デフォルトの名無しさん
2006/01/02(月) 22:35:310059デフォルトの名無しさん
2006/01/02(月) 22:50:060060デフォルトの名無しさん
2006/01/02(月) 23:14:230061デフォルトの名無しさん
2006/01/02(月) 23:16:090062デフォルトの名無しさん
2006/01/02(月) 23:31:440063デフォルトの名無しさん
2006/01/02(月) 23:39:260064デフォルトの名無しさん
2006/01/03(火) 03:28:080065デフォルトの名無しさん
2006/01/03(火) 03:29:060066デフォルトの名無しさん
2006/01/03(火) 03:37:51という宿題かもしれない。その場合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];
}
006766
2006/01/03(火) 03:43:28char * const a = "aiueo";
これもありか。
0068デフォルトの名無しさん
2006/01/03(火) 03:46:12仕様的にどうこうってのはわからないけど。
確保していない(ように見える)メモリを書き換えるのが違和感を覚える。
なんかイヤだ。
0069デフォルトの名無しさん
2006/01/03(火) 04:16:09鼻から悪(ry
0070デフォルトの名無しさん
2006/01/03(火) 04:20:24なんでXORでスワップできるのか分からん・・・
どこかに説明されてるページ無い?
0071デフォルトの名無しさん
2006/01/03(火) 04:36:511 ビットで交換できるか試せばいいじゃん。
引き算でも似たことができる。
ただ、はっきり言って変数使った方がいい場合が多い。
>>66
文字列リテラルの書き換えは鼻から悪(ry
0072デフォルトの名無しさん
2006/01/03(火) 04:57:54いや、交換できるか否かは紙とペンで試したから分かってるんだが
原理が分からない・・・
0073デフォルトの名無しさん
2006/01/03(火) 05:09:20例えば、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:22aとbをXORして求められる値に、元のaかbのどちらかをXORすれば、もう片方の値になる
あとは自分で考えなされ
0075デフォルトの名無しさん
2006/01/03(火) 05:20:46理解した。�dクス
要は同じ奴でXOR×2すれば元のに戻るってのを利用してるわけだな
楽しいじゃまいか(*゚Д゚) ムホムホ
0076デフォルトの名無しさん
2006/01/03(火) 08:56:030077デフォルトの名無しさん
2006/01/03(火) 08:59:12それをVSでASM表示させてみたが、Temporary使うときよりコード増えてるな・・・
0078デフォルトの名無しさん
2006/01/03(火) 15:38:05読み出し演算書き込みやってんだから、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誤
0から"ごきげんよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をごきげんよう\nの後ろに持ってきたいのです。
正
0から"おはよう\n"と追加して
以前あった"こんばんわ\nこんにちは"の値をおはよう\nの後ろに持ってきたいのです。
008179
2006/01/03(火) 20:45:11誤
レベルで容易されていますでしょうか
正
レベルで用意されていますでしょうか
0082デフォルトの名無しさん
2006/01/03(火) 22:30:10ない。
やるとしたらいったんファイルの中身を全てメモリに読み込んで,
temp.txtに"おはよう"を書き出し,その後に続けて
読み込んでおいた元のファイルの内容を書き出していくことになる。
0083デフォルトの名無しさん
2006/01/03(火) 23:14:37やはりそっすかorz
0084デフォルトの名無しさん
2006/01/04(水) 15:03:25system("echo おはよう > foo ; cat temp.txt >> foo ; mv foo temp.txt");
とか。
0085デフォルトの名無しさん
2006/01/04(水) 15:43:10この手が使える状況ってのは限られてるね。
0086sage
2006/01/04(水) 20:27:55{
string s1;
string s2;
}
すいません質問です。この関数を抜ける時、
s2, s1 の順でローカル変数が開放される事は
保証されているのでしょうか?
0087デフォルトの名無しさん
2006/01/04(水) 20:30:49局所変数の開放順は保証されてなかった気がする
0088デフォルトの名無しさん
2006/01/04(水) 20:34:21そすか、気がするで十分です
どうも助かりました
0089デフォルトの名無しさん
2006/01/04(水) 21:00:05大域変数はダメだけど。
0090デフォルトの名無しさん
2006/01/04(水) 21:06:540091デフォルトの名無しさん
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.
0093デフォルトの名無しさん
2006/01/04(水) 22:08:52A();
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>>91
0095デフォルトの名無しさん
2006/01/04(水) 23:29:35string s1;
foo();
string s2;
の場合はどうよ?
で、
string s1;
string s2;
の場合は?
0096デフォルトの名無しさん
2006/01/05(木) 00:07:36とかはこの挙動を前提にしていると思うんだけど
0097デフォルトの名無しさん
2006/01/05(木) 06:31:51逝って良し。
0098デフォルトの名無しさん
2006/01/05(木) 06:32:50ってどうなりますか?
0099デフォルトの名無しさん
2006/01/05(木) 07:01:50コンパイルエラー
010098
2006/01/05(木) 07:15:27p = new int[t];
でt=0のときはどうなりますか?
0101デフォルトの名無しさん
2006/01/05(木) 07:42:190102デフォルトの名無しさん
2006/01/05(木) 07:42:58010398
2006/01/05(木) 08:09:56int *p = new int[t];
でした
0104デフォルトの名無しさん
2006/01/05(木) 09:02:280105デフォルトの名無しさん
2006/01/05(木) 09:15:09こらこら嘘を書くな。
010698
2006/01/05(木) 10:42:58int *p = new int[t];
t=0のときはどうなるんでしょうか・・・
*pは不定値?NULL?それとも確保されない?
0107デフォルトの名無しさん
2006/01/05(木) 10:54:03t が 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. ]
0108107
2006/01/05(木) 10:55:050110デフォルトの名無しさん
2006/01/05(木) 11:15:24ちがうよバカ。
都合が悪いかどうかはプログラムによって決まること。
011198
2006/01/05(木) 11:22:270112デフォルトの名無しさん
2006/01/05(木) 11:27:17都合の悪い使い方の例を教えていただけませんか?
0114デフォルトの名無しさん
2006/01/05(木) 11:30:55要素数 0 なのに要素を参照するのはプログラムが間違ってると思わないか?
011598
2006/01/05(木) 11:33:120116デフォルトの名無しさん
2006/01/05(木) 11:42:58ちがうよバカ。
正しいプログラムでは問題にならない。
011798
2006/01/05(木) 11:44:420118デフォルトの名無しさん
2006/01/05(木) 11:51:41ヌルではないから、配列が確保されたかどうかの判別には使える。
他のポインタと違う値になるから、 std::map など連想配列のキーにも使える。
011998
2006/01/05(木) 11:56:590120デフォルトの名無しさん
2006/01/05(木) 12:08:33「都合が悪くない=使い道がある」とかいう思考回路もなんとかしとけよバカ。
012198
2006/01/05(木) 12:18:010122デフォルトの名無しさん
2006/01/05(木) 12:43:47思考回路も十分まずいよ、君の場合。
0123デフォルトの名無しさん
2006/01/05(木) 14:32:53というのはできますか?? ポインタをください。
環境は Debian で、gcc のバージョンは、3.3.5です。
オブジェクトの中身をStringにおとして、テキストでファイルに書き込んで、
それをまたよみこんで、オブジェクトを初期化するのは、どんくさいように思いました。
0124デフォルトの名無しさん
2006/01/05(木) 14:40:220125デフォルトの名無しさん
2006/01/05(木) 14:57:12できない。というか、言語側では面倒を見てくれない。
C、C++は自分で全部やるか他の人が作ったライブラリを
使うかしかない。
ちなみに、インスタンスの構造はメンバだけじゃないから、
オブジェクトをべたで書き出して後で読み込んだら
吹っ飛ぶかもしれないよ(仮想関数テーブルへのポインタとかね)
0126デフォルトの名無しさん
2006/01/05(木) 15:58:41boost:serialization
0127デフォルトの名無しさん
2006/01/05(木) 16:11:56を導入したいのですがうまくいかないため、ご教授願います。
入手元、マニュアル:
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鼬害。
0129デフォルトの名無しさん
2006/01/05(木) 16:41:56リンク先はオールドタイプだな
あんまり勧めたくないところだけど
>次の操作の.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解答ありがとうございます。
ただ、
./gccx sample.cc
と言うように入力したところ、
bash: ./gccx: 許可がありません
と応答されコンパイルされませんでした。root権限でも同様です。
どうすれば許可を得られるのでしょうか。
また、
>リンク先はオールドタイプだな
>あんまり勧めたくないところだけど
とありますが、お薦めがあれば教えてもらえると嬉しいです。
0131デフォルトの名無しさん
2006/01/05(木) 17:12:27>bash: ./gccx: 許可がありません
chmod u+x gccx
chmod u+x gccxe
chmod u+x gccxf
The UNIX Super Textでも読んで
まず基本的なことを身に着けた方が良いよ
0132デフォルトの名無しさん
2006/01/05(木) 17:14:45gccxなどのファイルパーミッションはちゃんと実行許可を立てていますか?
つーか、鼬害なのでとっとと犬板か海胆板にお帰りください。
0133デフォルトの名無しさん
2006/01/05(木) 17:41:39forループで処理するとしてfopenでファイル名で
どのようにループの変数を設定すればよいのでしょうか?
0134デフォルトの名無しさん
2006/01/05(木) 17:47:300135デフォルトの名無しさん
2006/01/05(木) 18:05:27>132
解答ありがとうございました。
確かに、
.bashrcに
>exoprt XINCDIR='/usr/X11R6/include/X11'
>export XLIBDIR='/usr/X11R6/lib'
(上のexoprt をexportに書き直しました)
と書き入れ、>131の方法で、許可を与え同様に実行しましたが、
XINCDIR: 定義されていない変数です。
と応答されまたもコンパイル不能でした。
基本操作だそうなので追加の解答は期待せず調べてみますね。
0136デフォルトの名無しさん
2006/01/05(木) 18:19:54typoごめんね
>XINCDIR: 定義されていない変数です。
$ export
とうつと今設定されている環境変数が表示されます
XINCDIRは設定されてる?
0137デフォルトの名無しさん
2006/01/05(木) 18:22:12for(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よろしくお願いします。
0139デフォルトの名無しさん
2006/01/05(木) 18:24:13あんまり甘やかすなや。
>>137
scanf()を使うのを諦め、fgets()とsscanf()を組み合わせて使う。
実例は、このスレか過去スレ、或いは宿題スレで見つかると思う。
0140デフォルトの名無しさん
2006/01/05(木) 18:30:54ありがとうございましたm(__)m
なんとかなりそうです。
0141デフォルトの名無しさん
2006/01/05(木) 19:43:29返信ありがとうございます。
ちょっと挙動に混乱したため(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:51C++を始めようと思うんですが、C++.netってコンパイルされた後の
コードが機械語じゃなく、半分翻訳された中間体のような物だとと聞きました。
過去のOSなどで使えるソフトが作れるような、機械語コードを吐き出す
C++は現在売られているのでしょうか?
よろしくお願いします。
0143デフォルトの名無しさん
2006/01/05(木) 19:55:000144デフォルトの名無しさん
2006/01/05(木) 19:56:10現在の主流の処理系は機械語を生成する。たぶんおまえが言ってるC++.netはmanaged C++のこと。
0145デフォルトの名無しさん
2006/01/05(木) 19:56:180146デフォルトの名無しさん
2006/01/05(木) 19:56:55'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示されます。
どうしたら実行できるようになるんですか?
0147デフォルトの名無しさん
2006/01/05(木) 19:57:360148デフォルトの名無しさん
2006/01/05(木) 19:57:410149デフォルトの名無しさん
2006/01/05(木) 19:58:15まずはPCを窓から投げ捨てろ
話はそれからだ
0150デフォルトの名無しさん
2006/01/05(木) 19:58:31GCCはインストールした?
したなら、環境変数PATHの値にgcc.exeのパスが含まれてる?
0151デフォルトの名無しさん
2006/01/05(木) 19:59:240152デフォルトの名無しさん
2006/01/05(木) 20:01:29そーか? VC++.NET本ってネイティブが主のが多いんじゃね。
おれの立ち読み感からするとだが
0153146
2006/01/05(木) 20:02:15いつもは学校でlinuxのターミナルでやってるので家のものは使い勝手が違いよくわかってないんですが、
他のやり方で作ったプログラムが機能してるかどうかテストできる方法ありませんか?
0154デフォルトの名無しさん
2006/01/05(木) 20:03:180155デフォルトの名無しさん
2006/01/05(木) 20:04:08WindowsでGCCを使うにはインストールが必要。
Mingwあたりを調べれ。
0156デフォルトの名無しさん
2006/01/05(木) 20:04:130157デフォルトの名無しさん
2006/01/05(木) 20:04:230158デフォルトの名無しさん
2006/01/05(木) 20:04:500159146
2006/01/05(木) 20:05:110160デフォルトの名無しさん
2006/01/05(木) 20:07:40C++.netを買ってプログラミングしてみます。
有難うございました。
0161デフォルトの名無しさん
2006/01/05(木) 20:09:38ありがとうございます。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:170163デフォルトの名無しさん
2006/01/05(木) 20:11:220164デフォルトの名無しさん
2006/01/05(木) 20:12:250165161
2006/01/05(木) 20:26:39もうちょっとしらべてみますね
0166デフォルトの名無しさん
2006/01/05(木) 20:28:200167161 ◆54OuYX6VME
2006/01/05(木) 20:37:45一応とりつけときます
0168デフォルトの名無しさん
2006/01/06(金) 00:45:320169デフォルトの名無しさん
2006/01/06(金) 03:09:12エラー出力を 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シグナルを無視すると無限ループになるし。。。
0172デフォルトの名無しさん
2006/01/06(金) 16:04:07こっちの方が良いかも
http://pc8.2ch.net/test/read.cgi/tech/1127373405/
0174デフォルトの名無しさん
2006/01/06(金) 20:22:32何をしたいのかよく解らん。
オペレータって何だ?関数のことか?
0175デフォルトの名無しさん
2006/01/06(金) 20:38:090176161 ◆54OuYX6VME
2006/01/06(金) 21:43:18皆さんどうもありがとうございました
0177デフォルトの名無しさん
2006/01/06(金) 22:13:51タイプリストを使って間接的にテンプレートを扱ってみては?
/// @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「z」がグローバルなのは関係ない。
double なのは大いに関係有りだが。
# %d 指定に double 渡すなボケ!
0179170
2006/01/07(土) 04:12:26テンプレートクラスのメソッドは、
独立したcppソースには書いてはいけないんでした…。
何度もはまったことなのに、今回気付くのに10時間以上かかりました…。orz
これがVC++7やBCC5.5に限った話なのかはわかりませんが…。
>>174
基底クラスのなかに、それを継承したら継承先のインスタンス同士の
演算子も絶対に定義させるような仕組みを作りたかったんです。
ポリモフィズムで何とかできるか考えていたのですが、
思い浮かばなかったので、テンプレートを使うことにしました。
>>175
かもしれないです…。
相反する概念であることは理解しているつもりなのですが、
実装するときにはなかなかうまくいきません。。
>>177
ありがとうございます。
そういうテンプレートの使い方があったんですね。勉強になります。
0180デフォルトの名無しさん
2006/01/07(土) 05:28:37いい勉強になったな。ではComeau C++でも(ry
0181デフォルトの名無しさん
2006/01/07(土) 05:42:470182デフォルトの名無しさん
2006/01/08(日) 22:06:210183デフォルトの名無しさん
2006/01/08(日) 22:21:480184デフォルトの名無しさん
2006/01/08(日) 22:25:04アホつった奴がアホなんだ。アホ。
0185デフォルトの名無しさん
2006/01/08(日) 22:33:500186デフォルトの名無しさん
2006/01/09(月) 01:22:100187デフォルトの名無しさん
2006/01/09(月) 12:54:07C++ってコンストラクタからコンストラクタを呼び出すって出来ますか?
例)
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:190189デフォルトの名無しさん
2006/01/09(月) 12:57:13コンストラクタから呼び出すコンストラクタは、一時オブジェクトになる。
つまり、それに操作を施しても結果が残らない。
0190デフォルトの名無しさん
2006/01/09(月) 13:15:42色々試してダメだったのよ
Foo() : Foo(0, '\0') {} もできなかった
>>189
複数のインターフェイスをもつ、
複雑なコンストラクタを持ちたい場合は、
実処理をprivateかprotectedな別関数に持たした方が良さそうですね。
>>188-189
ありがとうございました。
0191デフォルトの名無しさん
2006/01/09(月) 13:24:04class Foo { public: Foo(int i=0, char c='\0'); };
0192デフォルトの名無しさん
2006/01/09(月) 13:47:23ありがとうございます。
でも、実際はこんな感じなんです
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そういうのだと、分離したほうがすっきりしそうだね。
ついでに実デストラクタ(?) もセットにしておけば、スマートに見える(かも)
0194デフォルトの名無しさん
2006/01/09(月) 16:08:34プロジェクトフォルダ以外にインクルードファイルだけまとめたフォルダがあるんですが
参照したいインクルードファイルのフォルダの追加ってどこで設定できるんですか?
とりあえずプロジェクトの設定だいあろぐを出して色々みてるんですが
どこにあるかわかりません
0195デフォルトの名無しさん
2006/01/09(月) 16:14:050196デフォルトの名無しさん
2006/01/09(月) 16:19:36おかげさまで解決しました。ありがとうございます。
0197デフォルトの名無しさん
2006/01/09(月) 16:40:470198デフォルトの名無しさん
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どんなところに石が置けるのか、挟むとはどんなことなのかを日本語で書き出せ。
そしてそれをCで表現するにはどうしたらいいか考えろ。
0201続き
2006/01/09(月) 17:04:39l = 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:26printf ("\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();
}
0203198
2006/01/09(月) 17:10:58ぼくなりに考えたのですが
石を置いた時に、隣を見て自分と反対の色の石があり、なおかつ延長線上に自分の石がある時におけると思いました。
それを8方向調べる。
上記に当てはまらないばあいは置けない。
こんな感じだと思うんですがどうしてもC言語で表現する方法が思い浮かびません><
0204デフォルトの名無しさん
2006/01/09(月) 17:26:28思いつかないならまだ早いと言うことだ
0205198
2006/01/09(月) 17:33:29まだ独学ではじめて1ヶ月くらいなんです。。。
先生がいないから教えてほしいのです><
0206デフォルトの名無しさん
2006/01/09(月) 17:39:09まずはここから。これができたら、隣りの隣りを見て、隣りの隣りの隣りを見て...まぁがんばれやと。
0207198
2006/01/09(月) 17:45:50がんばってみます><
0208デフォルトの名無しさん
2006/01/09(月) 17:51:180209デフォルトの名無しさん
2006/01/09(月) 18:00:36それをそのままコーディングすればいいじゃない
0210デフォルトの名無しさん
2006/01/09(月) 18:31:180211198
2006/01/09(月) 18:32:58ふぅ少し休憩・・・
0212デフォルトの名無しさん
2006/01/09(月) 18:38:11いまいちどれを購入したらいいかわからないです。
とりあえず探してみたものなのですが
Microsoft Visual Studio .NETてのは、C++はいってるんですか?
ちなみに学生なので購入はできそうなのですが・・・・
あと、お勧めとかあったらおしえてください。
0213デフォルトの名無しさん
2006/01/09(月) 18:40:010214212
2006/01/09(月) 18:47:40Microsoft Visual Studio .NETの説明をみていると
複数の言語が入っているようなとらえ方をしてしまっているのですが
それであっているのでしょうか??
そうなると、C++でも使えなくなる命令語とかでてきるのでしょうか?
初歩の初歩だと思いますがどうか回答お願いします^^;
0215212
2006/01/09(月) 18:49:380216デフォルトの名無しさん
2006/01/09(月) 18:50:42学生だからアカデミックパック買えばいいけど
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
まずは、ただだからこれでもつかってみ
0217デフォルトの名無しさん
2006/01/09(月) 18:56:46学生ならVisual Studio.net 2003 theSpokeを購入するのが安上がり。C++入ってる。
今は購入して登録するとVisual Studi.net2005 Proを無償でDL出来るキャンペーンみたいなこともやってる。
スレ違いだけどな
0218212
2006/01/09(月) 22:05:58いろいろ、ありがとうございました。
0219デフォルトの名無しさん
2006/01/09(月) 22:36:16どっかにサンプルコードとかないですかね?
"libiconv サンプルコード"とかで検索しても上手くひっかからなくて…
0220デフォルトの名無しさん
2006/01/09(月) 23:17:52HPのiconv(3)とか
http://docs.hp.com/ja/B2355-90855/iconv.3C.html
オレ様サンプルで良ければこれを・・・
http://dream.my-sv.net/upload/src/up0094.lzh (Kaoriya配布版 iconv.dll用ラッパクラス)
0222デフォルトの名無しさん
2006/01/10(火) 01:26:25sprintf を利用するのはなしでお願いします。
16 のx 乗の余りをswitch-case で文字連結していくのはダサイですよね。。。
0223デフォルトの名無しさん
2006/01/10(火) 01:30:31std::ostringstream oss;
int n = 0x12345;
oss << std::hex << n;
std::cout << oss.str() << std::endl;
0224222
2006/01/10(火) 01:40:33あぁーん、そんなやり方があるんですね。
ありがとうございます。
0225デフォルトの名無しさん
2006/01/10(火) 02:03:32Cだけど
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:23Sub 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スレ違い
0228デフォルトの名無しさん
2006/01/10(火) 06:58:460229デフォルトの名無しさん
2006/01/10(火) 10:18:350230デフォルトの名無しさん
2006/01/10(火) 12:06:40他のアプリケーションを起動させる関数が分からなくて困っています。
自分のアプリケーションでヘルプボタンを押したら
ヘルプ用に作成してあるHTMLファイルをIE等で開きたいのです。
検索したもののキーワードが悪いのか、
いくらでも出てきそうなのに出てきません。
よろしくお願い致します。
環境:
WinXP(SP2)
BCC5.5.1
0231デフォルトの名無しさん
2006/01/10(火) 12:07:19Win32スレに逝った方がいいよ。
0233ちょっと教えてください
2006/01/10(火) 12:54:48いきません。cdtとcygwinをいれました。で、このサイトを
http://www2.atwiki.jp/ccw/pages/18.html
参考にmakefileをつくりビルドしましたが実行ファイルができません
今はhello01をビルドしてもコンソールに何もメッセージは出ていません。
どうすればc言語をコンパイル実行できますか?
0234デフォルトの名無しさん
2006/01/10(火) 13:00:26まずは、コマンドラインでコンパイルできるか試してみたら?
その手のIDEはコンパイラが適切にインストールされていることが前提なのだし。
0235ちょっと教えてください
2006/01/10(火) 13:16:43コマンドラインからはきちんとコンパイルできてa.exeができて実行できます
0236デフォルトの名無しさん
2006/01/10(火) 13:49:49makeは?
つーか、その辺になるとEclipseスレか。
#あるのか知らんが。
0237ちょっと教えてください
2006/01/10(火) 14:01:25こんな内容です
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:35Win2000SP4で権限チェックするモジュールがあります。
これは、NetUserGetLocalGroups()でログインしているユーザが所属しているローカルグループを
一覧して、「Administrators」グループに所属しているか確認しています。
ある特定の端末(数台)で、一覧されるユーザが「Users」権限のみになってしいます。
正常な端末では、「Users」と「Administrators」グループが取れます・・・
このAPIは端末の設定か何かで動作が変るものでしょうか??
0239デフォルトの名無しさん
2006/01/10(火) 14:42:42http://pc8.2ch.net/test/read.cgi/tech/1136673250/
0240デフォルトの名無しさん
2006/01/10(火) 19:56:46const char* getName() const;
の表記が見られますが、関数getName()の後ろにまで const を付ける意味が知りたいです。
const char* はgetNameの戻り値がconstである事を表しているのだと思いますが
後ろの const の役割がわかりません・・・
0241デフォルトの名無しさん
2006/01/10(火) 20:00:340242デフォルトの名無しさん
2006/01/10(火) 20:03:35なるほど、クラス内のメンバ変数も変更されないという事ですね。どうもです。
0243デフォルトの名無しさん
2006/01/10(火) 20:13:240244デフォルトの名無しさん
2006/01/10(火) 20:27:33E-mail: sage
内容:
コマンドの引き数として<実数><演算子><実数>の形で与えられた
四則演算を計算し、結果を出力するプログラムを書いたのですが、
引数が2個あたえられた場合にエラーを出力させる所が良くわかりません・・・
下のプログラムに書き足すとしたらどうしたら良いでしょうか?
0245デフォルトの名無しさん
2006/01/10(火) 20:28:08#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:270247デフォルトの名無しさん
2006/01/10(火) 22:47:45hello03
0248デフォルトの名無しさん
2006/01/10(火) 22:56:140249デフォルトの名無しさん
2006/01/11(水) 01:04:59作成したいのですが、イテレータを使って削除していくと実装手順によっては
メモリ保護違反で強制終了されてしまいます。
以下に、落ちる場合の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:11void 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:43erase()したら、イテレータが無効になる。二番目のものは、erase()
が返す、次の要素を指すイテレータを改めて取得しているので落ちない。
0252デフォルトの名無しさん
2006/01/11(水) 01:21:28なるほど。
next_it = current_it+1;
としてても、current_itがerase()されたらnext_itも無効になるんですね。
ありがとうございました。
0253デフォルトの名無しさん
2006/01/11(水) 01:31:46for文は使わずに、algorithm使った方がいいよ。
for文は危険だし、遅い。
0254デフォルトの名無しさん
2006/01/11(水) 01:35:49remove_if()でも使え、って事かな?
この場合は、後ろ側に集められた不要な要素をまとめてerase()する事になるね。
0255デフォルトの名無しさん
2006/01/11(水) 01:40:35要素」で上書きされる」ってあるから、上のようなオブジェクトをポインタが指す
例では、メモリリークが起きる。
for_each()を使っても、要素を「詰める」事はできないし、どのアルゴリズムを
使えばすっきりする?
0256デフォルトの名無しさん
2006/01/11(水) 01:50:13for(;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:060258デフォルトの名無しさん
2006/01/11(水) 02:00:22を使うべきだな。
erase()はEffective STLを見ればわかるように、返り値を次のイテレータとすれば
全く問題ない。
0259デフォルトの名無しさん
2006/01/11(水) 02:01:300260デフォルトの名無しさん
2006/01/11(水) 02:02:08ともEffective STLには書いてあったぞ。
0261デフォルトの名無しさん
2006/01/11(水) 02:10:060262デフォルトの名無しさん
2006/01/11(水) 02:11:180264デフォルトの名無しさん
2006/01/11(水) 02:18:49class 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う・・・・そういうのもあったのか。勉強不足ですた。スマソ
>>260
std::remove()が、消すべき要素を後ろ側に集めてくれるのなら
それも使えるが、現実問題、>>256のようにするしかないし。
0266デフォルトの名無しさん
2006/01/11(水) 02:26:270267デフォルトの名無しさん
2006/01/11(水) 03:27:40std::partitionが消すべき要素を後ろに集めるよ。
0268267
2006/01/11(水) 09:52:36std::partition は安定してないから順番も保持したいなら std::stable_partition
その辺は臨機応変に
0269デフォルトの名無しさん
2006/01/11(水) 12:40:580270デフォルトの名無しさん
2006/01/11(水) 12:43:56にゃぁ、にゃにゃにゃん、にゃ。
ぎゃーにゃ!
0271デフォルトの名無しさん
2006/01/11(水) 12:48:52とにかく付けとけば良い。コンパイラに怒られたら外す
0272デフォルトの名無しさん
2006/01/11(水) 15:18:490273デフォルトの名無しさん
2006/01/11(水) 15:47:280274269
2006/01/11(水) 16:00:13そうなんですか。
ではCでお願いします。
02751 ◆HSRZfxFrgo
2006/01/11(水) 16:17:08LCDに表示したいと思っております。
そこで、GIFの展開ルーチンのCソースコードを
誰か教えていただけないでしょうか?
紹介しているHPでも結構です。
C++だとできなかったので、Cのソースコードでお願いいたします。
よろしくお願いいたします。
0276デフォルトの名無しさん
2006/01/11(水) 16:18:17帰れ
0277デフォルトの名無しさん
2006/01/11(水) 16:18:190278aaa ◆HSRZfxFrgo
2006/01/11(水) 16:23:36すいません、間違えました。
でも、非常に困っているので、誰かお願いいたします。
0279デフォルトの名無しさん
2006/01/11(水) 16:24:45>C++だとできなかったので
できない訳無いやん。
0280デフォルトの名無しさん
2006/01/11(水) 16:28:30別にお前が困ろうと死のうと俺らには関係ないから消えろ
0281aaa ◆HSRZfxFrgo
2006/01/11(水) 16:33:43Cを使っています。
よろしくお願いいたします。
0282デフォルトの名無しさん
2006/01/11(水) 16:36:160283aaa ◆HSRZfxFrgo
2006/01/11(水) 16:40:46回答ありがとうございます。
C++からCに直すのは簡単でしょうか?
0284デフォルトの名無しさん
2006/01/11(水) 16:44:150285デフォルトの名無しさん
2006/01/11(水) 16:52:44読み込んで表示するだけならソース探すより自前で組んだ方が早いと思うが。
ttp://www.tohoho-web.com/wwwgif.htm
0286デフォルトの名無しさん
2006/01/11(水) 19:47:13単純な画像形式でしょ。
0287デフォルトの名無しさん
2006/01/11(水) 19:53:450288デフォルトの名無しさん
2006/01/11(水) 20:26:470289デフォルトの名無しさん
2006/01/11(水) 22:00:36テラワロスw
0290デフォルトの名無しさん
2006/01/11(水) 23:37:46ファイルオープンのプログラムを組んだとき、
ファイルはどのフォルダに入れておいたらいいんですか?
0291デフォルトの名無しさん
2006/01/11(水) 23:42:39‖/.:::.:.:.:.:.:.:. :. _ 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:25linuxでスレッドを複数経てたプログラムで
forkしてプログラムの複製を作った場合、スレッドも複製されるのでしょうか?
たとえば、スレッドを2つのプログラムをforkしたら
子プロセスもスレッドが2つ走ってる状態になりますか?
0293デフォルトの名無しさん
2006/01/12(木) 00:01:16そもそもファイルオープンのダイアログでは最初に表示されるフォルダを指定できる。
0294デフォルトの名無しさん
2006/01/12(木) 04:31:42#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:520296デフォルトの名無しさん
2006/01/12(木) 04:42:44早速の返事ありがとうございました。
unsigned char *mpにすると解決できました。
0297デフォルトの名無しさん
2006/01/12(木) 11:19:21メメタアと書いてあるように見えるが
0298デフォルトの名無しさん
2006/01/12(木) 11:26:450299デフォルトの名無しさん
2006/01/12(木) 16:33:10【質問】 画面消去の方法は?
0300デフォルトの名無しさん
2006/01/12(木) 16:52:410301デフォルトの名無しさん
2006/01/12(木) 17:03:50デスクトップのプロパティ → スクリーン セーバー → 電源 → モニタの電源を切るを一分にしてOK → 一分待つ
0302デフォルトの名無しさん
2006/01/12(木) 18:31:38やってみたら?
0303デフォルトの名無しさん
2006/01/12(木) 20:35:46黒で塗りつぶしたウィンドウを全面に表示する。ついでに、プログラムの切り替えを無効にする。
しかし、それでも他のプログラムから割り込まれる可能性はあるので、画面消去というのは難しい。
もっとも確実な方法は、画面そのものをユーザーの目に触れないところに移動することだけど、
残念ながら、Cではその処理を行うことは出来ない。
0304デフォルトの名無しさん
2006/01/12(木) 20:39:50電源プラグを抜く
0305デフォルトの名無しさん
2006/01/12(木) 21:09:400306デフォルトの名無しさん
2006/01/12(木) 21:42:13吹いた
0307デフォルトの名無しさん
2006/01/12(木) 22:17:34粗大ごみに出す
0308デフォルトの名無しさん
2006/01/13(金) 00:06:02DirectXで真っ黒なビットマップをフルスクリーン表示だ!
0309デフォルトの名無しさん
2006/01/13(金) 11:20:17> 画面そのものをユーザーの目に触れないところに移動することだけど、
ディスプレイ自体と画面は明確に分けるべきだな。
つまり、CRTディスプレイならブラウン管を、
液晶ディスプレイなら液晶を取り外すのが正しいはずだ。
0310デフォルトの名無しさん
2006/01/13(金) 11:45:46もうちょっと何がしたいのか書いたほうがいいよ(笑)
0311デフォルトの名無しさん
2006/01/13(金) 12:03:110312デフォルトの名無しさん
2006/01/13(金) 12:45:47それは見ないだけであって消去することにはならない。
0313デフォルトの名無しさん
2006/01/13(金) 13:03:350314デフォルトの名無しさん
2006/01/13(金) 13:13:210315地獄界のC使い
2006/01/13(金) 14:06:570316デフォルトの名無しさん
2006/01/13(金) 14:33:34新規作成でVisualC++のWindowsフォームアプリケーションを選択し、
プログラムを作成したいと思います。何かいい参考書はないでしょうか?
この間中身をよく確かめずに買ったテキストはMFCしか扱ってませんでした…
0317デフォルトの名無しさん
2006/01/13(金) 14:49:48スレ違い。書籍スレへ。
0318299
2006/01/13(金) 15:04:14猫でもわかるだと、\x1b[2Jで
できるはずなのですができないのです。
0319デフォルトの名無しさん
2006/01/13(金) 15:55:19curses使うとか。
0320デフォルトの名無しさん
2006/01/13(金) 16:04:40その、cursesとは?
0321デフォルトの名無しさん
2006/01/13(金) 16:06:13system( "cls" );
0322デフォルトの名無しさん
2006/01/13(金) 16:09:57Win9xならできるがNTでは16ビットプログラムでしかできない。
0323デフォルトの名無しさん
2006/01/13(金) 16:10:51状況がまるで分からん。そもそもそんなことをする必要性は?
手段を検討する以前のスキルだと思われるから、自分で考えた
手段を聞くより、総合的に何をしたいか聞くほうがいいと思う。
0324デフォルトの名無しさん
2006/01/13(金) 18:37:37その方法がありましたか。
あり。
0325デフォルトの名無しさん
2006/01/14(土) 05:56:19環境はWindowsなのでAPI使えば良いのは分かっているのですが出来れば環境非依存で標準の範囲で行いたいのです。
よろしくお願いします。
0326デフォルトの名無しさん
2006/01/14(土) 05:58:070327デフォルトの名無しさん
2006/01/14(土) 07:11:180328デフォルトの名無しさん
2006/01/14(土) 07:33:32標準に無いってのはC++使う範囲だと必要無いって事ですかね。
あっても良さそうなもんですが……。そう言われれば納得です。
>>327
調べてみましたがSEEK_END指定してftellですね。
参考にさせていただきます。
ありがとうございました。
0329デフォルトの名無しさん
2006/01/14(土) 08:58:56必要ないのじゃなく、標準の想定外。
ファイルサイズの概念がないOSだってあるのだから。
0330デフォルトの名無しさん
2006/01/14(土) 09:12:53例えば、入力値『110002』→出力値『1B0C2A』みたいに、
1が2つ続くから1B、0が3つ続くから0C、2が1つだから2Bというようにしたいんですけど。
何かやりかたがわかりません。
色々な本とか見て、進数を他の進数に変換するのとかは見つけられたんですけど、
自分で上みたいに指定して数字を変換ことが出来なくて。
0331330
2006/01/14(土) 09:18:130332デフォルトの名無しさん
2006/01/14(土) 09:23:080333デフォルトの名無しさん
2006/01/14(土) 09:27:00ええぇぇ
ここVisual Basicのスレではないよ。
0334330
2006/01/14(土) 09:33:120335330
2006/01/14(土) 09:34:30Visual J++6.0でした。
0337デフォルトの名無しさん
2006/01/14(土) 09:40:15>>334-336
お疲れさん。
0338デフォルトの名無しさん
2006/01/14(土) 09:41:220339デフォルトの名無しさん
2006/01/14(土) 22:40:41ofstream 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・・・となって
バイナリっぽくないんですが、もしかしてバイナリデータでは
ないんでしょうか?
といのは
0340339
2006/01/14(土) 22:45:29に対して今まで
sprintf( str, "%f\r\n", f );
の str を渡していました、それをVCのエディタで開くと
0.00000
と表示されて
000000 00 00 00
といった具合になってなかったもので
もしや、いままでバイナリデータで保存していなかったのか
と思った次第であります。
0341デフォルトの名無しさん
2006/01/14(土) 22:54:07出力されたファイルサイズ見てみれば?
0342339
2006/01/14(土) 23:05:28100000までの数字を出力してみたところ
out << i の方が out.write() よりサイズが
大きかったということは
out << i は
バイナリの皮をかぶったテキストだったのか・・・!!
0343デフォルトの名無しさん
2006/01/14(土) 23:22:280344デフォルトの名無しさん
2006/01/14(土) 23:25:55ios::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ぐぐりもせずに私見を述べて優越感に浸っているバカはこいつですか?
0347デフォルトの名無しさん
2006/01/14(土) 23:48:30少なくとも C++ の規格では名前どおりの "binary mode", "text mode" が使われてるのに
ここで"ROW"だの"COOCKED"だのを持ち出しているのはおかしい。
おかしいのに口調が偉そうなのは、確かにみっともない。
用語をスペルミスしといて、偉そうにぐぐれとか言うのも大変みっともない。
0348デフォルトの名無しさん
2006/01/14(土) 23:51:42スペルミスではなく、OS側から見た視点だけの事。
そういう些細な事で揚げ足を取りたがるのは、自信がない証拠。
0349デフォルトの名無しさん
2006/01/14(土) 23:52:470350デフォルトの名無しさん
2006/01/14(土) 23:54:43残念ながらその手には乗りませんのであしからず。
0351デフォルトの名無しさん
2006/01/14(土) 23:56:110352デフォルトの名無しさん
2006/01/14(土) 23:56:250353デフォルトの名無しさん
2006/01/14(土) 23:56:30ライブラリが'\n'をCR+LFに変換するという動作とは
全く何の関係も無いよ。
知ったかぶってる人がいるみたいだけど。
0354デフォルトの名無しさん
2006/01/15(日) 00:50:39coocked?
0355デフォルトの名無しさん
2006/01/15(日) 00:55:120356339
2006/01/15(日) 00:56:08rawとcookedなんぞ初めて聞きました
ググッてみると・・・わからん
奥が深い・・・!
で、 out << i を in.readで読み込むと
読めない!(85892741・・・こんな感じ)
で、独習C++によると
"<<演算子で操作するファイルは、書式設定された
テキストを含むファイルなので"
どう見ても
バイナリの皮をかぶったテキストファイルです
本当に有難うございました。
数々のレスどうもでした。
0357デフォルトの名無しさん
2006/01/15(日) 01:08:18だから、被るも何も、改行コードが違うだけだってばさ。
0358デフォルトの名無しさん
2006/01/15(日) 07:22:15意気揚々と出てきて1ターンで逃げるなよw
0359デフォルトの名無しさん
2006/01/15(日) 07:38:580360デフォルトの名無しさん
2006/01/15(日) 12:20:450361デフォルトの名無しさん
2006/01/15(日) 12:27:400362デフォルトの名無しさん
2006/01/15(日) 15:15:35どうやったらいいのでしょうか。
できればコンストラクタも第三者(クラス)から見えないようにしたいのですが。
0363デフォルトの名無しさん
2006/01/15(日) 15:20:260364デフォルトの名無しさん
2006/01/15(日) 15:26:59「特定のクラス」をフレンドクラスにしてやるってのじゃだめ?
0365デフォルトの名無しさん
2006/01/15(日) 15:57:380366デフォルトの名無しさん
2006/01/15(日) 16:08:30わかりにくくなるけどな。
0367362
2006/01/15(日) 23:50:54protected:
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(); //<-エラー
}
こんな感じですか?
0368362
2006/01/15(日) 23:53:15の10は不要です。
0369デフォルトの名無しさん
2006/01/16(月) 02:04:580370デフォルトの名無しさん
2006/01/16(月) 08:19:05とりあえず、無い。
念のため言っておくが、 template はプリプロセッサじゃないから、
「展開」なんて処理は行われていない可能性が高い。
0371デフォルトの名無しさん
2006/01/16(月) 08:33:41インラインテンプレート関数は最適化で痕跡さえ消えるし、アセンブリ出力を読むしか。
0372デフォルトの名無しさん
2006/01/16(月) 16:04:30HTMLに埋め込むPHPみたいな感じ。
0373デフォルトの名無しさん
2006/01/16(月) 16:19:160374デフォルトの名無しさん
2006/01/16(月) 18:33:36メタプログラミングの視点でみると
>>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:440377デフォルトの名無しさん
2006/01/22(日) 14:55:29∩_∩
( ・(ェ)・) あ、お構いなく
( ∪ ∪
と__)__)
0378デフォルトの名無しさん
2006/01/22(日) 14:59:10ちょっと考えただけだと NULL(); という文はコンパイルできないはず。
0379デフォルトの名無しさん
2006/01/22(日) 15:00:23いろいろ誤解しているようだがとりあえず、
C言語で書いたプログラムはコンパイルしないと実行ファイルにならない。
0380デフォルトの名無しさん
2006/01/22(日) 15:02:46普通のプログラムの大半はC言語で書かれています
0381B言語
2006/01/22(日) 15:04:580382375
2006/01/22(日) 15:12:20自分の環境だと
C言語としてコンパイルすると
「関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。」
というエラーが発生しますが、
C++としてコンパイルすると問題ない
(>>375のような結果になる)ようです。
気持ち悪いので自分では使わないようにします。
0383デフォルトの名無しさん
2006/01/22(日) 15:14:39どうせ、一瞬で終わっただけだろ。
GUIプログラムならダイアログでも出せばいいし、そうでないならコマンドインタプリタから実行すればいい。
0384デフォルトの名無しさん
2006/01/22(日) 15:20:08それで何か答えてもらえるとでも思うのか?
ここに居る奴らはエスパーじゃないぞ。
具体的な答えが欲しいなら、具体的な情報をまとめてよこせ。
0385デフォルトの名無しさん
2006/01/22(日) 15:21:36動体視力鍛えろ
0386B言語
2006/01/22(日) 15:24:27とかいう4つのファイルが出てきてそのうちのexeをクリックしても
何も起きずに一瞬で消える現象について解明したいってわけ
0387デフォルトの名無しさん
2006/01/22(日) 15:28:55そして答えは>383
0388デフォルトの名無しさん
2006/01/22(日) 15:32:08「消える」ってことは何か見えてるんだろ?
「何も起きない」とは全然違うじゃねーか。
0389B言語
2006/01/22(日) 15:33:27どーせお前らはパソコンがなけりゃただの安月給の貧乏人だよ負け犬ども
0390デフォルトの名無しさん
2006/01/22(日) 15:39:360391デフォルトの名無しさん
2006/01/22(日) 15:40:35mainのreturn直前にsystem("pause");でも入れ溶けクズ
0392デフォルトの名無しさん
2006/01/22(日) 15:41:030393B言語
2006/01/22(日) 15:41:32int 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:06C言語は一瞬で消えるから今日ヨーカドーで2500円のVsual Basic パーフェクトマスター
買っちゃったー
ぐはわわわわわピー
0397デフォルトの名無しさん
2006/01/22(日) 15:53:36で、中身は何人いるんだい?
便乗荒らしはよくないぞ。
まさか一人って事は無いんだろう?
まさかなぁ、はははは、は、は、、、、はぁ。
0398デフォルトの名無しさん
2006/01/22(日) 15:58:28Vsual Basic「だってえ」
2500円「どお?これが2500円よ」
Vsual Basic「ウィンドウが!ウィンドウが!」
一瞬で消えるから「パケット消失」
2500円「まいどあり」
Vsual Basic「Vista・・・」
0399デフォルトの名無しさん
2006/01/22(日) 16:05:24つまり、_DEBUG定義時にHOGE関数が必要で、それ以外の時にはそもそも必要無いのだろ?
だったらそんな不確実な書き方せんと、
HOGE()の所を↓にしとけよ
#ifdef _DEBUG
hoge();
#endif
0400B言語
2006/01/22(日) 16:05:26Visual Basic でプログラミングするには金がかかる
ギャーハハハハ
0401B言語
2006/01/22(日) 16:06:270402B言語
2006/01/22(日) 16:07:110403デフォルトの名無しさん
2006/01/22(日) 16:09:24ここに書くヒマがあったらネット検索で勉強しなさいナ。
0404B言語
2006/01/22(日) 16:12:47がってんだ!
ボリショイサーカス
0405%cofigurationOpeICO@
2006/01/22(日) 16:13:040406%cofigurationOpeICO@
2006/01/22(日) 16:15:260407デフォルトの名無しさん
2006/01/22(日) 16:21:510408デフォルトの名無しさん
2006/01/22(日) 16:53:250409デフォルトの名無しさん
2006/01/22(日) 16:55:550410デフォルトの名無しさん
2006/01/22(日) 16:56:12それだと何カ所もある場合めんどくさいじゃん。
#ifdef _DEBUG
#define HOGE() hoge()
#else
#define HOGE()
#endif
0411しろうと
2006/01/22(日) 17:25:22クラスを使用して、戻り値の配列を返したいのですが
どうすればよいでしょうか?
ご指導お願いいたします。
#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>411
2006/01/22(日) 17:26:52クラスを使用して、戻り値の配列を返したいのですが
ー>
クラスを使用して、戻り値に配列を返したいのですが
0413B言語
2006/01/22(日) 17:27:170414デフォルトの名無しさん
2006/01/22(日) 17:31:520415デフォルトの名無しさん
2006/01/22(日) 17:33:13配列は戻り値にも引き数としても直接受け渡し出来ない
0416デフォルトの名無しさん
2006/01/22(日) 17:33:27ライブラリ化したコードとか提供されていないのデツカ?
0417デフォルトの名無しさん
2006/01/22(日) 17:39:400418デフォルトの名無しさん
2006/01/22(日) 17:42:50つ[MFC]
0419デフォルトの名無しさん
2006/01/22(日) 17:51:04配列は戻り値にできない。そこでどうするかというと、
単純な方法ではnew []して動的メモリを返したり、
戻り値の代わりにポインタとその要素数を引数にしたり、
或いは要素数が固定なら配列の参照を引数にしたり。
しかしstd::vectorとかboost::arrayのような配列の代わりにクラス(・構造体)を返す方法がよりよいと思う。
0420デフォルトの名無しさん
2006/01/22(日) 17:52:27ますますお気楽とは正反対の方向だと思うけど。
>>416
Win32API自身もライブラリだよ、お気楽かどうかはともかく。
0421デフォルトの名無しさん
2006/01/22(日) 18:07:430422デフォルトの名無しさん
2006/01/22(日) 18:11:430423デフォルトの名無しさん
2006/01/22(日) 18:13:45_, ,_ ∩ , ・,‘
( ゚Д゚)彡☆
⊂彡☆))Д´)
.∴∴☆
. ∴
0424しろうと
2006/01/22(日) 18:18:26どうも感嘆にはできないのかー。
逃げ道はあるようですがなんか難しそうですね。
0425しろうと
2006/01/22(日) 19:53:23string s[100]={"a","b"};
配列の要素数を求める関数教えてください。
0426デフォルトの名無しさん
2006/01/22(日) 19:56:07sizeof(s) / sizeof(s[0])
0427デフォルトの名無しさん
2006/01/22(日) 20:03:270428デフォルトの名無しさん
2006/01/22(日) 20:06:25inline std::size_t lengthof(const T (&)[N])
{ return N; }
lengthof(s);
0429デフォルトの名無しさん
2006/01/22(日) 20:08:41template <typename T>
inline int sizeofarray(const T& a) {
return sizeof(a) / sizeof(a[0]);
}
0430デフォルトの名無しさん
2006/01/22(日) 20:28:200431デフォルトの名無しさん
2006/01/22(日) 21:06:020432デフォルトの名無しさん
2006/01/22(日) 21:14:25>列挙型の設定ファイルに
「列挙型を」って言いたいのか?
別に値のまま書き出せばいいじゃん
それとも設定は人が書くようなもんなの?
0433デフォルトの名無しさん
2006/01/22(日) 21:26:37reinterpret_castを使うのなら強引だと言えるが、
列挙型から整数型へは昇格があるし、逆もstatic_castで十分だし、強引なことは何も必要ないと思うのだが。
0434431
2006/01/22(日) 21:46:370435デフォルトの名無しさん
2006/01/22(日) 22:18:17いい参考書ありますか??
文字ばっかり羅列しているより例題みたいなとかが
載ってるのがいいのですが......
0436デフォルトの名無しさん
2006/01/22(日) 22:23:39入門書のほとんどは章毎とかで演習問題が付いていると思うよ?
あとはこっちで。
推薦図書/必読書のためのスレッド PART28
http://pc8.2ch.net/test/read.cgi/tech/1133629787/
0437デフォルトの名無しさん
2006/01/22(日) 22:42:02ありがとうございます。
0438デフォルトの名無しさん
2006/01/23(月) 07:52:26列挙体型のサイズは処理系依存なんで、
キャスト後のサイズと違うことがあって問題になる可能性がある。
例えば、含まれる値が 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:410441デフォルトの名無しさん
2006/01/23(月) 08:01:12じゃぁどこがいいですかね?
教えていただけると助かります。
0442デフォルトの名無しさん
2006/01/23(月) 08:03:210443デフォルトの名無しさん
2006/01/23(月) 08:04:13どうせ知らないんだろw
知ったかぶり乙
0444デフォルトの名無しさん
2006/01/23(月) 08:04:140445デフォルトの名無しさん
2006/01/23(月) 08:06:360446デフォルトの名無しさん
2006/01/23(月) 08:17:46バカじゃ無い奴は、大抵の問題を自分で解決できるから。
0447デフォルトの名無しさん
2006/01/23(月) 08:30:390448デフォルトの名無しさん
2006/01/23(月) 10:33:07耳に頼るんじゃなく、差分取って確認しる。
0449デフォルトの名無しさん
2006/01/24(火) 13:42:02基底クラスB(メンバ関数はvirtualで宣言)を継承したクラスAのポインタを
Bにキャストして、そのメンバ関数を扱うのは安全なのでしょうか?
0450デフォルトの名無しさん
2006/01/24(火) 13:43:21というか、それこそが多態性というものでは。
0451デフォルトの名無しさん
2006/01/24(火) 14:53:50ありがとうございます。
これで心置きなく使えます。
0452デフォルトの名無しさん
2006/01/24(火) 16:26:270453デフォルトの名無しさん
2006/01/24(火) 16:39:31同じじゃあない。
#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>>>449
>メンバ関数はvirtualで宣言
0455453
2006/01/25(水) 00:27:29ごめんなさい。
0456デフォルトの名無しさん
2006/01/26(木) 19:43:10作り方のヒントになるような書籍やサイトがあったら教えてください。
基本的なHTMLの知識や、ファイル操作のやり方は分かるのですが、
win98環境でオフラインテストをする方法から分からないので、
よろしくお願いします。
0457デフォルトの名無しさん
2006/01/26(木) 20:59:19まずは「CGIとは何か?」から調べた方がよさそうだな。
0458デフォルトの名無しさん
2006/01/26(木) 22:56:14オフラインでテストならフリーのサーバーソフトが必要
0459456
2006/01/26(木) 23:16:35CGIはサーバ上で動作するプログラムというように解釈しています。
掲示板をつくりには、HTMLで記載したフォームからプログラムへ、
データを送信して、処理を行わせ、実行結果を返すことが必要かと…
違っていたらゴメンナサイ。教えていただけると、助かります。
>>458
アパッチなどのことでしょうか?
サイトの説明を見たのですがよく分からなかったので、
その辺りを分かりやすく解説してある書籍かサイトを、
紹介していただけると、助かります。
よろしくお願いします。
0460デフォルトの名無しさん
2006/01/26(木) 23:21:030461459
2006/01/26(木) 23:30:07何とか分かりそうなサイトが見つかりました。
こちらで勉強してみます。失礼しました。
0462デフォルトの名無しさん
2006/01/26(木) 23:40:24有志によるMMOというジャンルのゲーム製作です。
参加資格:力ある者
0463デフォルトの名無しさん
2006/01/27(金) 00:03:47プロデューサーが最悪と言うことはよく解った
0464デフォルトの名無しさん
2006/01/27(金) 00:06:52因数分解するプログラムを作れ。
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:090466デフォルトの名無しさん
2006/01/27(金) 00:09:510467デフォルトの名無しさん
2006/01/27(金) 00:20:17ガベコレが便利とかいう話はそりゃ組むだけの奴の勝手な理論であって、
メモリの確保/解放が明示的にできてないプログラムって可読性悪いよなってことでFAでいいでしょうか?
0468デフォルトの名無しさん
2006/01/27(金) 00:23:300469デフォルトの名無しさん
2006/01/27(金) 00:26:260470デフォルトの名無しさん
2006/01/27(金) 00:29:400471デフォルトの名無しさん
2006/01/27(金) 00:33:04明示的な確保/解放を追いたいときは別だろうが、
そんなときにガベコレ使うバカは50%くらいしかおらんだろうし。
0472デフォルトの名無しさん
2006/01/27(金) 00:44:22ガベコレに頼ろうとする奴は確保と解放を同じクラス内で
完結させようとはしないだろうからな。
あっちのクラスで用意したインスタンスを
こっちのクラスで解放するなんてこと普通にやってた環境なら
ガベコレなんぞ使ったら可読性は悪いな。
0473デフォルトの名無しさん
2006/01/27(金) 09:54:27CGIのプログラミングの前に、
HTTPのプロトコルの仕組みや、CGIの動作概要を覚えておくべき。
それが分かれば、>>456の様な質問は出なかったはず。
勉強の順番を間違っちゃいかんよ?
0474デフォルトの名無しさん
2006/01/27(金) 10:02:55int 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それぐらいはダレでも書けるだろう
設置でつまづく前に>>473だろうな
0476デフォルトの名無しさん
2006/01/27(金) 22:49:550477デフォルトの名無しさん
2006/01/28(土) 08:36:170478デフォルトの名無しさん
2006/01/29(日) 03:52:12ソケット通信周りの手頃なサンプルはないもんでしょうかね。
ファイル転送と言ってもファイル名やらタイムスタンプやらは後でどうとでもなるので、
単に中身だけが転送されればいいのだけれど。
探してみても、簡単すぎて固定長のKB以内のデータしか転送してなかったり、
逆にftpばりに高機能だったりで……
#Solaris/Linux/Cygwin(OrPSDK)で動かしたいというのもサンプル見つける障碍だったり。
0479デフォルトの名無しさん
2006/01/29(日) 10:37:35十分なサンプルだと思うけど?
何が不足していると思うわけ?
マルチプラットホームの部分?
0480デフォルトの名無しさん
2006/01/29(日) 13:34:00を相手に送りつければ良いんじゃねえの?
0481478
2006/01/29(日) 17:49:19終端文字まで受信することにすると、終端文字を含むファイルを送れない可能性が出てきてしまうので巧くないと思われ。
予めデータサイズを送れば(先頭に付加するなどして)よさそうだけど、サイズ分(例えば8バイト?)がパケット分割される可能性は?
また、途中でデータの流れが滞ったらタイムアウト処理しなければいけない?
など考えなきゃいけないことが多そうで、その辺りを反映したロジックが転がっていないかなぁと。
>>479
確かに、SolarisとLinux(orCygwin)とWinAPI(Winsock)の微妙な違いもよく判らない。
Linux用のサンプルがSolarisやWinsockだとそのままでは動かなかったりね。
0482デフォルトの名無しさん
2006/01/29(日) 21:07:55ECHOサーバ以外になんか作ったか?
0483デフォルトの名無しさん
2006/01/29(日) 21:30:39構造体使えばいいんじゃね?同期方式なんて面倒くさい
タイムアウトはソケットに着信があったかどうか見ればいい
残りの細かいことは適当なRFC読め
あとこれ
ttp://pc8.2ch.net/test/read.cgi/tech/1136005644/-6
0484デフォルトの名無しさん
2006/01/29(日) 23:25:00制御用とデータ用の2セッション持ってば?
それか、TFTPの規格でも参考にしたらどうよ?
0485478
2006/01/30(月) 01:02:51あはは、ばればれっすな。
ECHOサーバ以外には簡単な送受信プログラムをメンテナンスしたことくらいしかありません。
>>484
TFTPですか。調べてみます。
……なんだ、やりたいことはほぼこれですね。サーバはSolarisかLinuxだからtftpdを使えば
tftpクライアントを実装するだけな気が……
0486デフォルトの名無しさん
2006/01/30(月) 10:03:20既製でいいなら、TFTPクライアントをインストールすればいいジャマイカ
0487デフォルトの名無しさん
2006/01/31(火) 09:14:57なにか本でも買おうかと思うのですが、
CができないとC++覚えるのはきついでしょうか。
あとWin32APIについても別に本を買って覚えた方がいいんでしょうか。
0488デフォルトの名無しさん
2006/01/31(火) 09:21:07とりあえず本読め
後のことはそれから考える。
0489デフォルトの名無しさん
2006/01/31(火) 09:27:130490デフォルトの名無しさん
2006/01/31(火) 09:28:000491デフォルトの名無しさん
2006/01/31(火) 21:51:18C++からいきなり覚えてもよいと俺は言いたいのだが、
世の中の大半のC++の入門書はCができることを前提にしているから仕方がない。
0492デフォルトの名無しさん
2006/01/31(火) 22:06:150493492
2006/01/31(火) 22:06:550494デフォルトの名無しさん
2006/02/01(水) 04:30:070495デフォルトの名無しさん
2006/02/01(水) 04:31:190496デフォルトの名無しさん
2006/02/01(水) 07:53:46絶対パスを格納した文字列を得るポータブルな方法はありますでしょうか?
Visual C++ だと _fullpath() という関数があるのですが、
他の環境でも使えるような方法があれば教えてください。
0497デフォルトの名無しさん
2006/02/01(水) 08:01:54ANSI非標準の関数には _ 付きの名前が割り当てられています。
これは 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「Visual C++ 2005 では、この POSIX 関数は使用しないでください。
代わりに ISO C++ 準拠の _getcwd を使用してください。」
と書いてあるのですが、 _getcwd って ISO C++ 準拠なんでしょうか?
0500デフォルトの名無しさん
2006/02/01(水) 10:17:42マクロで一方の表記に統一する
0501デフォルトの名無しさん
2006/02/01(水) 10:28:24皆様ありがとうございました。
ちなみに余談ですが、プラットフォーム間パスの表記の違いは
boost::filesystem::path で切り抜けることにしました。
0502デフォルトの名無しさん
2006/02/01(水) 11:01:36環境は以下の通りです。
Redhat Linux カーネルver 2.4.21
gcc 3.2.3
0503デフォルトの名無しさん
2006/02/01(水) 17:19:281単語変換するごとに100KBほどメモリリークするようなのですが、
これは何とかならないのですか?
同じ単語を変換してもメモリ使用量は増えないので、キャッシュと見ることもできますが、
それでも、何千単語も変換されるうちにメモリ使用量が数百MB増えてしまいます><
根本的な解決にならなくてもいいので、何か回避策を教えてください。
0504デフォルトの名無しさん
2006/02/01(水) 17:22:52C/C++と何の関係があるのか?と小一時間(ry
0505デフォルトの名無しさん
2006/02/01(水) 17:42:23ついでに、おまえは実際何千単語も変換してメモリ使用量の変移を確認したのか?と小一時間(ry
0506503
2006/02/01(水) 18:29:47その線で探ってみます。
>>505
いやまじです。新しい単語を次々変換していくと、本当に100KB程度ずつメモリ使用量が増えていきます。
0507デフォルトの名無しさん
2006/02/01(水) 18:49:390508デフォルトの名無しさん
2006/02/01(水) 18:55:170509デフォルトの名無しさん
2006/02/01(水) 18:57:010510503
2006/02/01(水) 19:00:26なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
SetProcessWorkingSetSizeで強制的に全て開放させられるのですが、必要なメモリもスワップされちゃうので、
もうちょっとましなやり方がないか探してみます。
>>508
必要ないメモリを開放しないこと=メモリリークと思ってましたが微妙に違うようですね><
0511デフォルトの名無しさん
2006/02/01(水) 19:05:11最小化しないアプリを作ってるんです><
というか定期的に最小化するアプリを作るわけにはいかないので・・・。
リークではないけど、他のプロセスがメモリを使いたくても使えなかったり、
システム自体が重くなるので、無駄なメモリの使用は避けたいのです。
たとえリークでも、一度プロセス終了して起動しなおせば開放されますけどね・・・。
0512デフォルトの名無しさん
2006/02/01(水) 19:35:19「無駄なメモリーの使用」かどうかは君が判断することじゃない。
0513503
2006/02/01(水) 19:41:41どうしてもWindows用の高効率アプリを作りたいので、自分で判断したいのです><
予約してるメモリだけを開放する関数はないのだろうか・・・。
0514デフォルトの名無しさん
2006/02/01(水) 19:59:30メモリの空きが増えるかも(メモリクリーナの動作原理らしい)
でもCPU使用率が上がるから効率悪いがwwww
0515503
2006/02/01(水) 20:23:34SetProcessWorkingSetSizeで使用量をほとんど0にできるのですが、
負荷が大きすぎるし、必要なメモリまでスワップされてスローダウンするので、
予約してるメモリだけ開放できる方法がないか探してます。
0516デフォルトの名無しさん
2006/02/01(水) 21:34:38そんなことしたら、別のプロセスで必要なメモリがスワップに追いやられたり、
仮想メモリと物理メモリのアドレスのキャッシュも消えたりして、いいことなんてまったくないと思うが。
>>515
IMEと同じものを、自分で実装したまえ。
そこまで気にする貴方なら、
さぞかしすばらしくメモリ効率のいいものを、実装できるはずだ。
0517デフォルトの名無しさん
2006/02/01(水) 21:37:32>システム自体が重くなるので、無駄なメモリの使用は避けたいのです。
そのへんはOSがよきにはからってくれるので気にするな。
>なぜか必要なメモリの数倍のメモリを確保して、必要なくなってもすぐに開放しないと。
メモリを1バイト単位で管理してるわけじゃないからね。
ページサイズ分はどうやっても確保されるんじゃね
0518デフォルトの名無しさん
2006/02/01(水) 21:54:21誰かVC#2005EEとVC++2005EE、どっちがどう違うのか教えてくれ(´д`υ
MS-DOS上でMSCv6扱ってたことはあるんだが、Win+VCとなると使ったこと無いので差が判らんなりよ。。
0519デフォルトの名無しさん
2006/02/01(水) 21:55:420520デフォルトの名無しさん
2006/02/01(水) 21:59:550521デフォルトの名無しさん
2006/02/01(水) 22:07:40どの言語かもわからんやつが来る場所ではない
初心者以前じゃ
0523503
2006/02/01(水) 22:45:34こっちにします。
文字列変換が必要になったら別プロセスを立ち上げ、変換が終わったらそのプロセスを終了する。
これで無駄なメモリ使用とおさらばできるはずです。
0524503
2006/02/01(水) 22:53:27文字列変換用のヘルパープロセスは起動しっぱなしで、
変換が終わったらSetProcessWorkingSetSizeでメモリ開放した方が効率いいかな。
0525デフォルトの名無しさん
2006/02/01(水) 22:54:120526デフォルトの名無しさん
2006/02/01(水) 22:55:12あなたのような潔癖症の人間は、OSから作った方がよいと思われます。
0527デフォルトの名無しさん
2006/02/01(水) 23:06:20メモリの容量や用途は、時代とともに変わっていくもので、
MSの、Windoesのメモリマネージャ開発者もそのことは十分承知している。
Windows95などでは、使われなくなったメモリは、
かなり早い時点でスワップに退避させるような設計になっていると思う。
あの頃はメモリ数十MBだったから。
でも今は、1, 2GBのメモリをつんでいる人も珍しくないので、
必要になるまで、物理メモリを割り当てたまま放置するような設計になっていると思う。
やはり>>503は、OSから自作すべきだと思うよ。
0528503
2006/02/01(水) 23:12:59「必要になるまで、物理メモリを割り当てたまま放置するような設計」
というのは理解できるのですが、
いざ必要になったときの処理がものすごく適当なので、その設計には頼りたくないのです。
というかOSの設計者はメモリが不足したときのことをぜんぜん考えてない気がします。
0529デフォルトの名無しさん
2006/02/01(水) 23:19:46おかげでウィルスキャッシュとかGoogle DesktopみたいにHDDスキャンするアプリがキャッシュ無効せずに走ると一気にメモリが枯渇する
0530デフォルトの名無しさん
2006/02/01(水) 23:23:00あるある、
DVD焼いたりしたりすると、起動中のアプリとか、どんどんスワップアウトしていきやがる。
ほんとアレ何とかならんのかね?
0532503
2006/02/01(水) 23:31:08ディスクキャッシュのサイズを制限するか無効化すれば良いと思います。
XPでどうやるのか知りませんが。
0533デフォルトの名無しさん
2006/02/01(水) 23:37:550534デフォルトの名無しさん
2006/02/02(木) 00:08:20結局のところスワップアウトが嫌なら、ページファイル無効にしとけばいいんじゃないの?
0535デフォルトの名無しさん
2006/02/02(木) 00:19:12さっきから訳の解らないこと行ってるんじゃネェヨ!
てめぇの言っている現象はリークじゃねぇ、
と皆さんが言っているのに、何故聞き入れないのだ?
0536503
2006/02/02(木) 00:24:270537デフォルトの名無しさん
2006/02/02(木) 00:27:300538デフォルトの名無しさん
2006/02/02(木) 00:31:520539デフォルトの名無しさん
2006/02/02(木) 00:34:310540503
2006/02/02(木) 00:36:420541デフォルトの名無しさん
2006/02/02(木) 00:37:54ATOK2005にしてからは直っている。もうすぐ2006も出るし、FEP変えるとか。
0542503
2006/02/02(木) 00:42:31>>531と>>532は>>530へのレスなんですが、
ページファイルを無効にすると、結果的にディスクキャッシュの使用を抑えられるということですか?
0543デフォルトの名無しさん
2006/02/02(木) 04:54:06>>503 が「メモリ消費」っていってるのは、おそらく
>>503 が脳内でイメージしているメモリ消費とは違うと思うんだが。
0544デフォルトの名無しさん
2006/02/02(木) 05:54:22お前の脳内イメージはどうでもいいよ
0545デフォルトの名無しさん
2006/02/02(木) 09:55:48> FEP
最近ではIMEが正しいらしいよ
# 漏れもFEPの方がしっくりくるが。
0546503
2006/02/02(木) 23:19:30GetProcessMemoryInfoで取得したページファイル使用サイズ(こっちが本当に必要なメモリサイズらしい)を指定したら、
不要なメモリだけ開放できたっぽいのでこっちでいきます。
うまく動作しなかったら、またヘルパープロセスで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やはり環境依存のコードを書くしかないんじゃないかな。
Windows限定で言うと、
実際にアクセスしてみて、問題なければ存在している。
メモリが割り当ててなければ、AVが飛んでくるから、
構造化例外で受けて、何事もなかったかのように実行再開
よほど特殊な事情がない限りお勧めできない
(大量のメモリを予約だけしてコミットしない、必要な部分だけコミットする。)
0549デフォルトの名無しさん
2006/02/04(土) 19:50:43それだとdeleteがOSにメモリを返さずにプールする実装だと死ぬなw
>>547
C++ならboost::weak_ptrとboost::shared_ptrの併用で良いんじゃないの
0550547
2006/02/04(土) 20:10:58>>548
Win環境だけならアクセスして、ポインタ先を見るのですな。
>>549
boost::shared_ptr初めて見ましたのでググッてみました
なるほど。参照の状況によって適切にdeleteなんぞしてくれるのですな。
スバラスィ
どの様な環境にも耐えられるように
>>549案でチャレンジしてみます。
有難うございました。
0551547
2006/02/04(土) 20:15:59英語が読めんとです・・・
ここは自分でポインタを
しっかり管理するしかないですな
ひと段落したら boost をやっちみます
0552デフォルトの名無しさん
2006/02/04(土) 20:18:12ttp://boost.cppll.jp/HEAD/
0553デフォルトの名無しさん
2006/02/04(土) 20:23:45ttp://www.kmonos.net/alang/boost/
0554547
2006/02/04(土) 20:47:19おお!日本語サイトですか有難うございます
しかしながら
ラインセスは英語で小難しいとです・・・
エキサイトにぶち込んでみたところ
無料で提供します。
版権情報と注意書きはちゃんと書いてください。
という事でいいんでしょうか。
わからないのが”ライセンス交付金”という奴なのですが
0555デフォルトの名無しさん
2006/02/04(土) 20:54:14商用でもOKで、ソース公開の義務もないし、
boostを手本にして書いたコードは、勝手に自分独自のライセンスにしてOKだったはず。
0557547
2006/02/05(日) 00:13:50おかげさまで、コードが綺麗になりました
数々の情報有難うございました。
0558デフォルトの名無しさん
2006/02/06(月) 06:59:13GUI風に使えるソフトがありましたら教えてください。
0559デフォルトの名無しさん
2006/02/06(月) 09:38:37バッファを確保しようとするとAccess violationエラーが発生します。
unsigned* pBuf = new unsigned[150000]; // ここでエラー発生
.
.
delete [] pBuf;
1GもRAMを搭載しているのに60万バイトのメモリブロックすら確保できないのは
なぜでしょうか。
0560デフォルトの名無しさん
2006/02/06(月) 09:47:5816bitモードで使ってるのと違う?
0561デフォルトの名無しさん
2006/02/06(月) 09:54:18念のためコンパイラのオプションでヒープサイズを変えられないか調べてみましたが、
それらしい設定項目は見当たりませんでした。
ひょっとして.defファイルの中でヒープに関する設定をする必要があるのでしょうか。
0562デフォルトの名無しさん
2006/02/06(月) 10:21:07マジレスすると、確保できる量はだいたいOSと、コミットできるメモリ量で決まる。
WindowsXPなら、何もいじらなければおおよそ2GBまで確保できる(スワップ
ファイルを含む)
俺も5.02Jを使っていた事があるけど、その程度ではビクともしないはず。
試しに、newでなくて、staticでどれだけ確保できるか試してみそ。
それと、5.02Jは古いC++なので、bad_allocを返さないので、pBufが
0だったら確保に失敗しているよ。
0563デフォルトの名無しさん
2006/02/06(月) 10:49:31今は 4 × 150000 = 600000 バイト必要なんだから、HEAPSIZEを
1000000 くらいに設定してみてはどうか。
0564デフォルトの名無しさん
2006/02/06(月) 10:58:21600000バイトって600Kバイトだから、デフォルトで足りそうなんだが・・・・
0565デフォルトの名無しさん
2006/02/06(月) 11:10:05return 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:58char* test(){
return "koredeiinokana"; //←本当はデータを取得するから大きなデータ
}
void main(){
printf(test());
}
ポインタを直接渡していいのかいまいち自信がありません。
0567デフォルトの名無しさん
2006/02/06(月) 11:13:36test()が返す文字列の中に書式指定文字列があると、
変な事になるぞ。
0568599
2006/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変ですねえ。コマンドラインであっても、GUIベースであっても、
基本的には同じはずなんですが。
staticで確保できるって事は、ヒープ領域は問題なさそうですね。
5.02Jインストールしてあるマシンが手元にないので、はっきりした
事は言えないのですが、記憶では、何もしなくてもそのまま動作
したような記憶があります。
0570デフォルトの名無しさん
2006/02/06(月) 11:30:24アプリによって動作が変わるんなら、エラーの出るほうでヒープをぶっ壊してるんだろう。
0571デフォルトの名無しさん
2006/02/06(月) 11:33:59int Complex::im() だと this の型は Complex* になる。
この場合は Complex const* を受け取るようにメンバ関数の宣言(定義)を変えればいい。
int Complex::im() const ...
int Complex::re() const ...
0572デフォルトの名無しさん
2006/02/06(月) 12:20:50なるほど… constを関数宣言の最後につけるんですね。
新しい文法をまた学びました、ありがとうございます。
0573デフォルトの名無しさん
2006/02/06(月) 15:14:48newで確保した三次元配列を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;
}
}
0574573
2006/02/06(月) 15:18:010575デフォルトの名無しさん
2006/02/06(月) 15:22:18この部分でi書き換えてるからループの回数がおかしくなったんだよ
for(i=0;i<3;i++)cin>>test[0][0][i];
for(i=0;i<3;i++)cout<<test[0][0][i]<<endl;
0576575
2006/02/06(月) 15:23:28for(n=0;n<i;n++){
0577573
2006/02/06(月) 15:31:40うかつでした・・・
しかし、書き換えてみたのですがやはりメモリが増え続けてしまいます。
グローバルでの宣言が駄目なのでしょうか?
0578デフォルトの名無しさん
2006/02/06(月) 15:40:55どう書き換えたの?
こっちではその部分の書き換えでリークは無くなったけど。
あと無理してnewしなくてもstd::vector使ったほうが良いと思うよ
0579デフォルトの名無しさん
2006/02/06(月) 16:17:250580デフォルトの名無しさん
2006/02/06(月) 16:19:11print
}
0581573
2006/02/06(月) 16:26:36std::vecterを試してみます。
0582デフォルトの名無しさん
2006/02/06(月) 16:33:44vectorでそれと等価になるように書けばこんな感じ
#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:02Windowsでそんなに大量のメモリを確保するのなら、
直接VirtualAllocを呼ぶほうがよい。
0584599
2006/02/07(火) 11:55:48レス有り難うございます。
VirtualAllocについては初めて知りました。ただ件のアプリの場合は、同じコードを
コマンドラインで実行するとエラーになり、GUIではならないことから>>570さんの
ご指摘の通りどこかで不正な処理を行っていると思われます。もっとも特定は
かなり難しそう。と思っていたら、あれれ、おかしいぞ
int *p = new[1000000];
delete [] p;
この二行をコードの随所で実行してどこでエラーが生じるか調べていたんですが、
配列の長さを即値で渡しているときにはエラーにならないのに、
int len = 1000000;
int *p = new int[len];
と配列長を変数で渡すとエラー発生。はて?
0585デフォルトの名無しさん
2006/02/07(火) 12:14:020586デフォルトの名無しさん
2006/02/07(火) 12:38:5916bitコード吐けたっけ?
0587デフォルトの名無しさん
2006/02/07(火) 12:40:24559 に「Windows XP & Borland C++ 5.02J」とあるから、さすがにそれは無いと思うよ。
0588デフォルトの名無しさん
2006/02/07(火) 13:08:5916bitコード吐けるけど、デフォルトは32bitだよ。
デバッガ走らせてCPUウィンドゥを開けばすぐわかる。
0589559
2006/02/07(火) 13:32:50int 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お前馬鹿か?
strtok以前にここで問題に気づけ。
char* pchBuf = new char[param.length()];
strcpy(pchBuf, param.c_str());
#といっても俺もこのミスたまにやるんだよなぁ
0591デフォルトの名無しさん
2006/02/07(火) 13:51:540592デフォルトの名無しさん
2006/02/07(火) 14:57:15絶対につけておかねばな。
0593デフォルトの名無しさん
2006/02/07(火) 15:05:47param.copy(pchBuf, std::string::npos);
pchBuf[param.length()] = 0;
が正解かな
なんか長くてうっとうしいな
0594デフォルトの名無しさん
2006/02/07(火) 15:10:080595デフォルトの名無しさん
2006/02/07(火) 15:27:04は奨めちゃいかんな
0596デフォルトの名無しさん
2006/02/07(火) 15:29:53strdupが定義されて無い環境では自分で定義する。という条件付なら良いんじゃない?
ほんの数行だし
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始めから、そのコードを晒しておけば、すぐに解決したものを…
どうして問題が再現する最小のコードを貼らないのか…
0598デフォルトの名無しさん
2006/02/07(火) 15:39:11bad_allocを投げない(要NULLチェック)というのもあるし。
特に前者は忘れがちだし。
newを使ってbad_allocを投げる関数を自分で作ればよいだけなんだけどね。
0599デフォルトの名無しさん
2006/02/07(火) 15:43:56mallocにしてたけどC++だと逆に余計なお世話だな
確かにnew[]したほうが良いか。
0600デフォルトの名無しさん
2006/02/07(火) 21:36:440601デフォルトの名無しさん
2006/02/07(火) 22:12:58半年前からCの勉強をしていてひと段落したのでC++に進もうと思っております
オブジェクト、クラスなどのことがわかりやすく書いてある参考書などおありましたあ教えていただけないでしょうか?
よろしくお願いいたします
0602デフォルトの名無しさん
2006/02/07(火) 22:19:230603デフォルトの名無しさん
2006/02/07(火) 22:20:25推薦図書/必読書のためのスレッド PART29
http://pc8.2ch.net/test/read.cgi/tech/1138179810/
0604デフォルトの名無しさん
2006/02/07(火) 22:24:37サンクス
0605デフォルトの名無しさん
2006/02/08(水) 13:02:53STDMETHOD(hoge)(THIS_ LPCSTR foo);
の、STDMETHODとTHIS_ってのはどういう意味でしょうか?
文法的にも、型の前に更になんかくっついているのははじめてみたのですが、
ググってみてもこれらを当然のように使っているサンプルコードとかしか引っかかりません。
なるべく平易に教えていただけると嬉しいです。
0606デフォルトの名無しさん
2006/02/08(水) 13:07:50・ぐぐった?
0607605
2006/02/08(水) 13:13:230608デフォルトの名無しさん
2006/02/08(水) 13:30:49定義はヘッダファイルあると思う。
0609デフォルトの名無しさん
2006/02/08(水) 13:36:48おそらく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の呼び出し関数の引数と戻り値に 構造体を使用したいのです。
よろしくお願いします。
0612デフォルトの名無しさん
2006/02/08(水) 15:00:38http://pc8.2ch.net/test/read.cgi/tech/1136690107/724
0613デフォルトの名無しさん
2006/02/08(水) 17:31:14コンボボックスで選んだ文字列を取得する場合
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:48SendMessage → Win32API
GetDlgItemText → MFC
0615デフォルトの名無しさん
2006/02/08(水) 17:52:06スッキリしました
ありがとうございます
0616デフォルトの名無しさん
2006/02/08(水) 18:07:140617デフォルトの名無しさん
2006/02/08(水) 18:22:02_eof
0618デフォルトの名無しさん
2006/02/08(水) 19:12:04Windows上のようですが、UNIXの場合どうしたらいいですか?
0619デフォルトの名無しさん
2006/02/08(水) 19:42:21lseek(SEEK_END)で返ってくるバイト数が
直前に呼んだlseekに渡したバイト数以下ならeof。
0620デフォルトの名無しさん
2006/02/08(水) 19:43:08ありがとうございます。
0621デフォルトの名無しさん
2006/02/08(水) 20:31:30GetDlgItemTextはAPIにもあるよ。
0622デフォルトの名無しさん
2006/02/08(水) 20:41:42関数名に入っている感じかな。
0623デフォルトの名無しさん
2006/02/08(水) 22:10:53//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動体視力をもっと鍛えるんだ!!!
0626デフォルトの名無しさん
2006/02/09(木) 02:37:46まず、キーボードを良く見よう。
そう、あるはずだ。
PrintScreenと書かれたキーが。
あとは分かるな?
0627デフォルトの名無しさん
2006/02/09(木) 03:07:46system("pause");
0628デフォルトの名無しさん
2006/02/09(木) 03:21:45サンクスコ!
0629デフォルトの名無しさん
2006/02/09(木) 04:03:43ワラタ
他にはreturnの前にgetchar();もしくはコマンドプロンプトでその
フォルダに移動してから、コマンドプロンプトで実行
0630デフォルトの名無しさん
2006/02/09(木) 10:45:15ありがとうございました。
VBからの引数はchar*で宣言を行い。
623さんの、やり方を行ったところうまくいきました。
0631デフォルトの名無しさん
2006/02/09(木) 10:56:530632デフォルトの名無しさん
2006/02/09(木) 14:20:19それとも、関数本体に付ければいいんですか?
0633デフォルトの名無しさん
2006/02/09(木) 14:25:010634デフォルトの名無しさん
2006/02/11(土) 02:06:410635デフォルトの名無しさん
2006/02/12(日) 04:41:47C++で同じようなことをやるとコンパイルする時点でどちらかがもう片方をタイプ名だと認識してくれません。
例えば、
//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:480637デフォルトの名無しさん
2006/02/12(日) 05:31:57可能だということが分かったのでEssential C++とThinking in C++を
もう1回隅々まで読んでヒントを探してみます。
ありがとうございます。
0638デフォルトの名無しさん
2006/02/12(日) 05:56:210639デフォルトの名無しさん
2006/02/12(日) 06:17:28class People; // Peopleクラスの宣言
class World{
中略
};
class People { // Peopleクラスの定義
以下略
0640デフォルトの名無しさん
2006/02/12(日) 11:06:23エディットコントロール上で 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:220642デフォルトの名無しさん
2006/02/12(日) 12:32:50本を見ながら学んでいるのですが、char型変数は漢字を表現できるのでしょうか?
コンパイルしても、文字化けするのですが。教えてください、よろしくお願いします。
0643デフォルトの名無しさん
2006/02/12(日) 12:44:03charは無理。char*なら環境依存。wchar_tなら確実。
0644デフォルトの名無しさん
2006/02/12(日) 12:50:34もう一冊の本にはできないと書いてありました。ダウンロードしたファイルも
間違っているのみたいですね・・・本選びからはじめます。ありがとうございました。
0645デフォルトの名無しさん
2006/02/12(日) 13:15:05漢字はどの漢字コードでも最低2バイト。
char型はsizeofすればわかるけど1バイト。
入るわけがない。
char[]やchar*な文字列は2文字分にまたがって格納できるからOK。
あと間違っても
char str[16];
str = "漢";とかstr = '漢';などとやらないように。
0646644です
2006/02/12(日) 13:25:50すいません、全くわからないです。まだ始めたばかりで、char*というのは
なんでしょうか?この本のは
char moji1='本';
という感じなんですけど。環境がいけないのでしょうか?
0647デフォルトの名無しさん
2006/02/12(日) 13:27:20始めたばかりで分からないのは当然。
しばらく進めてから質問汁
0648デフォルトの名無しさん
2006/02/12(日) 13:34:15本当にそのまんま書いてあるならそのファイル作った香具師殴り殺していい。
0649デフォルトの名無しさん
2006/02/12(日) 13:36:270650644です
2006/02/12(日) 13:42:030651デフォルトの名無しさん
2006/02/12(日) 14:13:040652デフォルトの名無しさん
2006/02/12(日) 14:16:440653デフォルトの名無しさん
2006/02/12(日) 14:24:460654デフォルトの名無しさん
2006/02/12(日) 14:26:180655644です
2006/02/12(日) 14:32:12char moji2='本'
printf("%c",moji2);
というやり方ではできないですよね?なんどもすいません
0656デフォルトの名無しさん
2006/02/12(日) 14:43:420657デフォルトの名無しさん
2006/02/12(日) 14:58:350658デフォルトの名無しさん
2006/02/12(日) 15:33:45日本語だのやりたいなら、char*がなんなのか分かるようになってからだ
0659デフォルトの名無しさん
2006/02/12(日) 15:36:04char moji2='A'
printf("%c",moji2);
とかって書いてあるのに
644が勝手に2バイト文字を突っ込んで動かないってほざいてるだけだろ、たぶん
0660644です。
2006/02/12(日) 15:50:18char moji2='言';
と書いてあります。
確かに漢字が使われており、「c言語」と表示しようとしています。
うそではないです。ご迷惑をかけてすいません。勉強します。
0661デフォルトの名無しさん
2006/02/12(日) 16:00:01数学の計算ミスとかそんなレベルでなく、それがネタでなくて
ガチだったら池沼もいいとこ。
0662デフォルトの名無しさん
2006/02/12(日) 16:02:33と初期化すれば6バイト割り当てられておまけに最後に'\0'で初期化されると書いてあった
「はじめてのC++」並にひどいな
0663デフォルトの名無しさん
2006/02/12(日) 16:02:570664デフォルトの名無しさん
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:300668デフォルトの名無しさん
2006/02/12(日) 16:50:56>>664に出てるだろ?
0669デフォルトの名無しさん
2006/02/12(日) 16:56:32How‐nual Visual Guide Book
秀和システム2002/03
横田 一輝 の検索結果
Illustrator文書作成術
住所録のデータを年賀状ソフトに変換できる本
しっかりわかるコントロールパネル―Windows98/98SE編
事例引き Access「クエリ」ハンドブック
PCサーバのしくみ 入門ビジュアル・コンピューティング
あとJAVA,C#本が数冊
0670デフォルトの名無しさん
2006/02/12(日) 17:00:52横田 一輝 (著)
出版社: 秀和システム ; 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最近はC#の本を出してる。
Cの本はこれ以外にないから、あまり期待できんな。
京都造形芸術大学の講師らしい。
0673デフォルトの名無しさん
2006/02/12(日) 17:06:180674デフォルトの名無しさん
2006/02/12(日) 17:06:34糞っぽい大学だなと思ってたらやっぱり中の人も同レベルか
0675デフォルトの名無しさん
2006/02/12(日) 17:07:15http://www.shuwasystem.co.jp/books/7980/0283-6/0283-6.html
これを見る限り、根本的な誤りには気付いてなさそうだな。
0676デフォルトの名無しさん
2006/02/12(日) 17:12:100677デフォルトの名無しさん
2006/02/12(日) 17:12:47http://www.f-site.com/
■代表者プロフィール
横田 一輝(よこた かずき)
1965年大阪府生まれ名古屋育ち
通産省情報処理試験対策の教員としてコンピュータ専門学校に勤務後、SEとしてメーカーの社内システム構築などに従事。
現在は関西フリーサイト代表として、大学,専門学校講師、パソコン関連本の執筆活動、システム開発など様々な分野で活動中。
・中高教員免許(社会)
・情報処理�T種技術者
0678デフォルトの名無しさん
2006/02/12(日) 17:18:070679デフォルトの名無しさん
2006/02/12(日) 17:18:27サンプルってここにある奴か?
http://www.f-site.com/down.html
で、問題のサンプルはどの.lzhだ?
0680デフォルトの名無しさん
2006/02/12(日) 17:21:55旧I種別は今のSWに対応しているようだ。
0681デフォルトの名無しさん
2006/02/12(日) 17:24:38あぁFEは旧II種の方か
しかしこんな奴が取れるとはな
0682デフォルトの名無しさん
2006/02/12(日) 17:28:31#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#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:22I種はC言語を知らなくても取れるし
0686デフォルトの名無しさん
2006/02/12(日) 18:36:56コンパイラはLSI-Cか……。
とても2002年に書かれた本とは思えない。
0687デフォルトの名無しさん
2006/02/12(日) 18:40:29void 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:180689デフォルトの名無しさん
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せめて、自分はどうやったらいいと思ったのか、
そしてやってみたらどんなエラーが出たのか、
これぐらいは用意してから質問してくれ。
0692644です。
2006/02/12(日) 19:07:35これからは、よく調べてから本を買います。
質問しなかったら、えらいことになってました。
ご迷惑かけてすいませんでした。
0693デフォルトの名無しさん
2006/02/12(日) 19:19:25根本的な勘違いをしている。
参照渡しにはならん。
char a ;
a ;//この型はchar
char ary[10]
ary[0] ; //この型はchar
ary ; //この型はchar *
char hoge[128][256] ;
hoge[0][0] ; //この型は、char
hoge[0] ; //じゃあ、この型は?
hoge ; //この型は?
&hoge ; //この型は?
0694693
2006/02/12(日) 19:23:06&ary ; //この型は、char (*)[10]
0695デフォルトの名無しさん
2006/02/12(日) 20:49:27それともcppファイルに書くのが普通?
0696デフォルトの名無しさん
2006/02/12(日) 20:51:450697デフォルトの名無しさん
2006/02/12(日) 21:43:39何この関数
>>690
fprintfを調べてみろ
そこから先は自分で考えろ
0698デフォルトの名無しさん
2006/02/12(日) 22:02:00「二次元配列」と「1次元配列へのポインタの配列」の違いを考えろ
256x128要素の二次元配列は、32768個のデータが隙間なく並んでいる。
128要素の1次元配列への256要素のポインタ配列は、
・128個のデータが隙間なく詰まった配列が
・どこだか分からないけど合計で256個あって
・それぞれの配列の先頭アドレスが
・256個のポインタが隙間なく詰まった配列に記録されていて
・そのポインタ配列の先頭アドレスがchar** hogeとなる
ってこと。
0699デフォルトの名無しさん
2006/02/12(日) 22:12:08char *pszStars[128];
for( int i = 0 ; i < 128 ; ++i ){
pszStars[i] = szStars[i];
}
test(pszStars);
0700デフォルトの名無しさん
2006/02/12(日) 23:42:07別にcharが16bit以上あるような環境があってもおかしくないが。
0701デフォルトの名無しさん
2006/02/12(日) 23:53:120702デフォルトの名無しさん
2006/02/12(日) 23:53:460703デフォルトの名無しさん
2006/02/12(日) 23:54:330705デフォルトの名無しさん
2006/02/13(月) 00:25:140706デフォルトの名無しさん
2006/02/13(月) 00:49:230707デフォルトの名無しさん
2006/02/13(月) 00:54:130708デフォルトの名無しさん
2006/02/13(月) 07:57:560709デフォルトの名無しさん
2006/02/13(月) 08:15:040710デフォルトの名無しさん
2006/02/13(月) 08:21:170711デフォルトの名無しさん
2006/02/13(月) 12:29:58既出だったりスレ違いだったら申し訳ありません。
初歩的なことだと思うのですが、
C++で、
class A{
B* b;
};
class B{
A* a;
};
みたいな事をしたい場合どうすればいいのでしょうか。
コンパイルするとB*って何?みたいなエラーが帰ってきてしまいます。
0712デフォルトの名無しさん
2006/02/13(月) 12:32:12class B;
class A{
B* b;
};
class B{
A* a;
};
0713デフォルトの名無しさん
2006/02/13(月) 12:33:340714デフォルトの名無しさん
2006/02/13(月) 12:39:150715デフォルトの名無しさん
2006/02/13(月) 14:03:38ただ、こういう構造になってしまうのは、設計でなにかがまずいんだ。
こういうの普通に考えてありえないでしょ?
他人のプログラムの改変とかで、こっちのが楽だっていうならいいが、
これが新規で作って出てきたクラスだとしたら、あまりにもセンスが無いw
0716デフォルトの名無しさん
2006/02/13(月) 17:58:41んなこたーない
0717デフォルトの名無しさん
2006/02/13(月) 18:24:12そうだってw
こんなチグハグな設計になるわけないだろw
自分が馬鹿なの自慢しにくるなよw
0718デフォルトの名無しさん
2006/02/13(月) 18:52:15>>711のまんまならおかしいけど
色んな要素がある中で
そういう循環参照になるのは
ありがちだよ
そういうこともしないで
ムダな関数処理してるプログラマのがバカ
0720デフォルトの名無しさん
2006/02/13(月) 21:34:37それで済むようにできるのが俺のプログラムの上手さだと思ってる。
業界でもっとも複雑であろうゲームを作ってきた俺が必要なかったのに、
業務でアホなコード組んでるお前が複雑なデータなんて扱う必要があるわけない。
無理だというならそれがお前の限界。
0721デフォルトの名無しさん
2006/02/13(月) 21:55:46うむ。同意だが、ageてると説得力半減だ。
0722デフォルトの名無しさん
2006/02/13(月) 22:10:070723デフォルトの名無しさん
2006/02/13(月) 23:22:420724デフォルトの名無しさん
2006/02/13(月) 23:32:04そんな糞設計してて自分が正しいと思ってんのねw
オブジェクト指向は現実にある構成をそのままプログラムに反映できる設計よ。
この世にそんな構造のもんなんて存在しないでしょ?
自分が間違えてるのわかりそうなもんだけど。
まあ、馬鹿だからしょうがないかw
技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。
悲しいねぇw
0725デフォルトの名無しさん
2006/02/13(月) 23:36:07それはやりすぎだ。
誰も釣れないぞ。
0726デフォルトの名無しさん
2006/02/13(月) 23:37:08> この世にそんな構造のもんなんて存在しないでしょ?
世の中、人間の知っている事より知らない事の方が多いのに、
よく恥ずかしげも無くそんな事言えるね。
> 技術なんて人に評価されたことないから間違ってても気がつかないんでしょ。
自己紹介乙
0727デフォルトの名無しさん
2006/02/14(火) 00:03:10はぁ?反論しようとするのはいいけど、自分の話をどう進めるかぐらいはできるようにしてくれよ。
てか、お前、俺のレスにどこに噛み付いて、どう否定したくて、自分はどう考えてるか?すら伝わってこねぇぞ。
頭悪すぎだろ。つか、日常生活で人とまともに会話できてる?
最近、>>726みたいなのって多くなったな。
なんか、宇宙人みたい。これがゆとり教育の弊害か?
張り切って釣りしようと思ってきたのに日本語しゃべれないんじゃしょうがない。さらば!
本読めよ!数学頑張れ!
0728デフォルトの名無しさん
2006/02/14(火) 00:08:42ただ煽ってるだけ見える。
0729デフォルトの名無しさん
2006/02/14(火) 00:13:17プログラムもいいけど、たまには小説でも読もう。
0730デフォルトの名無しさん
2006/02/14(火) 00:17:41> 本読めよ!
オマエガナー
0731デフォルトの名無しさん
2006/02/14(火) 00:18:260732デフォルトの名無しさん
2006/02/14(火) 00:30:41よく、こんな狭い視野してPG出来るなぁ…。
0733デフォルトの名無しさん
2006/02/14(火) 00:51:25PGとしてじゃなく人として。哀れ>>727www
0734デフォルトの名無しさん
2006/02/14(火) 00:58:070735デフォルトの名無しさん
2006/02/14(火) 02:38:380736デフォルトの名無しさん
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タスクトレイにアイコンを表示して常駐するソフトを作成中です。
タスクトレイにアイコンは表示できたのですが、ウィンドウの透明化ができなくて
困っています。
ウィンドウの透明化はどのように行うのが一般的ですか?
0743デフォルトの名無しさん
2006/02/14(火) 15:30:540745デフォルトの名無しさん
2006/02/14(火) 15:37:350746デフォルトの名無しさん
2006/02/14(火) 15:54:50ShowWindow(SW_HIDE)
と思ったら、自分のコードではそれに加えて
MainFrameのPreCreateの中で
cs.style &= ~WS_VISIBLE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);
こんなことやってるなあ、、、どれが効いてるんだっけ。
0747デフォルトの名無しさん
2006/02/14(火) 15:55:06ShowWindowだけ調べとけ
0748742
2006/02/14(火) 16:02:31ShowWindowの引数にSW_HIDEを入れたらできました。
0749デフォルトの名無しさん
2006/02/15(水) 00:54:38それはオブジェクトなのか?
そもそも、オブジェクト指向が理解できてないな。
あくまで「物」が主体なんだよ。
循環参照ができてしまうなんてのは未熟の証明でしかない。
そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?
物体Aの構成要素に物体Aがあるってことだぞ。
すでに破綻してる。
こんな脳みそでプログラムなんて組んだら破綻するのも当然。
オブジェクト指向をちゃんと勉強しろ。
0750デフォルトの名無しさん
2006/02/15(水) 01:01:14プ!
オブジェクトが物って誰が決めたんだよ。おまえの脳内理解のレベルが
その程度ってことだけは、よ〜く判ったよ。
0751デフォルトの名無しさん
2006/02/15(水) 01:06:440752デフォルトの名無しさん
2006/02/15(水) 01:13:130753デフォルトの名無しさん
2006/02/15(水) 01:14:39ローカルルールより
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
0754デフォルトの名無しさん
2006/02/15(水) 01:16:15お前こそわかってねぇな。
こうやって作れば絶対に破綻しないんだよ。
0755デフォルトの名無しさん
2006/02/15(水) 01:17:050756デフォルトの名無しさん
2006/02/15(水) 01:52:08>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?
AさんはBさんの電話番号を知ってる。BさんはAさんの電話番号を知ってる。
互いに相手に電話をかけてメッセージを送ったり何か仕事してもらったりできる。
たまに「おかけになった電話番号が使われておりません」ってことになるかも。
普通だな。
0757デフォルトの名無しさん
2006/02/15(水) 01:55:36ちがう。
そもそも電話番号なんてクラスになりえない。
オブジェクト指向でいえば電話番号なんて物じゃない。
クラスにしたとしても最適化のためだったり設計に結びつくようなものにはならない。
てめーはホントに頭悪いんだな。
0758デフォルトの名無しさん
2006/02/15(水) 02:01:35{
class タマゴ* 自分が出てきたタマゴ;
};
class タマゴ
{
class ニワトリ* 自分を産んだニワトリ;
};
0759デフォルトの名無しさん
2006/02/15(水) 02:10:25> そもそも現実にそんな物体が存在するのか?
> この世にそんな物体が存在できるのか?
GNU is Not UNIX
0760デフォルトの名無しさん
2006/02/15(水) 02:13:48>物体Aの構成要素に物体Aがあるってことだぞ。
class ノード
{
リンク* 右;
リンク* 左;
};
class リンク
{
ノード* 右;
ノード* 左;
};
0761デフォルトの名無しさん
2006/02/15(水) 02:16:24お前さんは本当に頭が悪くていらっしゃる。
0762デフォルトの名無しさん
2006/02/15(水) 02:17:13それは循環参照じゃなくて無限再帰。
0763デフォルトの名無しさん
2006/02/15(水) 02:46:080764デフォルトの名無しさん
2006/02/15(水) 03:57:38int *i; i++;
じゃ関数のポインタは?
int *(unko)(); unko++;
この場合int分進むの?ってことはこのintの部分は別にcharでもdoubleでも好きなの勝手に入れていいの?
それともunkoに指させる予定の関数の返り血の型にあわせとく必要があるの?もしそうならなんのため?ですか?
0765デフォルトの名無しさん
2006/02/15(水) 03:58:520766デフォルトの名無しさん
2006/02/15(水) 04:22:25どうでもいいが、
int (*p)() だろ
もちろんそれは、変数の型( int (*)(void) )のサイズだけ進む。
具体的に言うと、
sizeof(p) == sizeof(int (*)(void)) == //処理系依存
MSVCなら、ポインタはすべて4バイト
0767デフォルトの名無しさん
2006/02/15(水) 05:24:31・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はぁ?なんの話してんだ?お前等?
まともな思考回路脳みそにねーの?
プログラムなんて組むだけ無駄だから止めちまえ。
0769デフォルトの名無しさん
2006/02/15(水) 06:46:48はオイラですがそれより上の人は知りませんよう
0770デフォルトの名無しさん
2006/02/15(水) 08:02:45反論できないけど黙ってるのも悔しいからとりあえず火病、
という追い込まれた状況はよく理解できたから、もう来なくてもいいですよ。
0771デフォルトの名無しさん
2006/02/15(水) 08:44:040772デフォルトの名無しさん
2006/02/15(水) 09:24:51>> 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# 僕は君を知ってる。
# 君は僕を知ってる。
# 循環参照。
#
# 749 :デフォルトの名無しさん :2006/02/15(水) 00:54:38
# >>739
# それはオブジェクトなのか?
# そもそも、オブジェクト指向が理解できてないな。
# あくまで「物」が主体なんだよ。
「君」や「僕」はオブジェクトだと思うが…。
そうか、>>749はこの世に存在しないのか!
0775デフォルトの名無しさん
2006/02/15(水) 09:38:490776デフォルトの名無しさん
2006/02/15(水) 09:58:57あるいはメタファなしにはなにも理解できないと言っても過言ではない。
コンピュータ関連の用語はほとんどそれ以外の世界の言葉の借用であることからも
何と無く類推できよう。
0777デフォルトの名無しさん
2006/02/15(水) 10:27:16無能は例え話しかできないんだよ。語録不足だから。
0778デフォルトの名無しさん
2006/02/15(水) 11:01:22何か存在しないとか言い切ってる奴ってアフォなの?
どんな有用な構造だって、強引に否定すればいくらでも無視できるだろw
0779デフォルトの名無しさん
2006/02/15(水) 11:01:580780デフォルトの名無しさん
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:03Unmanagedな奴なら従来のとほとんど互換性有ると思うがそれでもダメなのか?
0782デフォルトの名無しさん
2006/02/15(水) 12:11:10それを使うっていうてもあるし、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>VC++6.0 から、.Net Framework って、使えるのでしょうか?
混乱させてしまったようで済みません。使えません。
VC++ 6.0 についているのは C++ コンパイラだからです。
VC++ 2005 についている C++/CLI コンパイラなら使えます。
0785デフォルトの名無しさん
2006/02/15(水) 18:08:58書籍サンプルで、ソース中に「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:51MSDN嫁
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つまりそのコンパイルするのにヘッダとかが必要なのは分かるのですが、
ではぜlibのプロジェクトでコンパイルする時には必要ないのか?
という理屈が分からないのです。
0788デフォルトの名無しさん
2006/02/15(水) 19:05:450789デフォルトの名無しさん
2006/02/15(水) 19:10:58libのプロジェクトからwin32アプリに持っていった時に、
設定が変わっているからじゃないの?
0790デフォルトの名無しさん
2006/02/15(水) 19:25:24ども。リンクの設定かなとか思ったんですけど、
libのプロジェクトの方はそもそもリンクの設定するところがないみたいです。
ライブラリとかインクルードファイルの設定はプロジェクトが変わっても一定ですし。。
他にどこか設定する所ってのはおもいうかびませんです。すいません。
0791デフォルトの名無しさん
2006/02/15(水) 19:28:36はぁ?
「知っている」状態を表すのにどうしてオブジェクト自体を内包するの?
そもそも素質ねーんだよお前。
例えば、「俺」オブジェクトと「お前」オブジェクトがあったとして
「俺」が存在することで「お前」のプログラム自体に直接影響を与えちまうのはそもそもおかしい話なんじゃねーか?
こういう頭が無いってところですでにオブジェクト指向を理解できる見込みが全く無い。
さっさとプログラマなんて辞めちまえ。
0792デフォルトの名無しさん
2006/02/15(水) 19:31:01>あくまで「物」が主体なんだよ。
>
>循環参照ができてしまうなんてのは未熟の証明でしかない。
>そもそも現実にそんな物体が存在するのか?この世にそんな物体が存在できるのか?
つまり、オブジェクト指向プログラミングでは
現実に存在する「もの」しかプログラミング対象に
ならない、と・・・
いやぁ。実に斬新な説だな。
0793デフォルトの名無しさん
2006/02/15(水) 20:08:04>712辺り。
0794デフォルトの名無しさん
2006/02/15(水) 20:10:45参照って言ってるのに・・・・
0795デフォルトの名無しさん
2006/02/15(水) 20:13:450796デフォルトの名無しさん
2006/02/15(水) 20:14:02あとはVisitorとか。
0797デフォルトの名無しさん
2006/02/15(水) 20:16:59実装方法の分離という理念を
しっかり体得出来ていない人が、
「参照を持っている->他のオブジェクトを包含する」
という安直な発想に陥りやすい。
0798デフォルトの名無しさん
2006/02/15(水) 20:16:59コード上は互いを参照しているようには見えない。
それをもって、「循環参照していない」と勘違いしている未熟者がいるのかもしれないけどな。
0799デフォルトの名無しさん
2006/02/15(水) 20:38:06コンパイルエラーなんだろ? ならリンクは関係ない。
インクルード関係にどこか違いがあるはず。
0800デフォルトの名無しさん
2006/02/15(水) 20:47:35はぁ?ちゃんと読めよ。
俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
合わせてソースを書き換える必要があること自体おかしいって言ってんの。
ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。
そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
つまり、100X100の一万件分ソースを書くということか?
苦労だけ一丁前で全然金にならないなw
すっげ馬鹿が変に噛み付いてくる予防線として書いておくけど
ここでvoid*もしくはそれに近いものを使って、とっかえひっかえポインタ使いまわしても
(そもそもひとつのポインタを使いまわして複数のインスタンスを出し入れするなんて危険なことした時点でそいつはいらない)
俺は同じくそいつに「プログラマ辞めろ」という。
0801デフォルトの名無しさん
2006/02/15(水) 20:50:53>はぁ?ちゃんと読めよ。
>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。
いやぁ、いくら読んでも
やっぱり判らないや(w
0802デフォルトの名無しさん
2006/02/15(水) 20:55:03>俺はそもそも「お前」オブジェクトを「俺」オブジェクトに
>合わせてソースを書き換える必要があること自体おかしいって言ってんの。
>ポインタとしてもつのも設計としておかしいって言ってるの。わかったか馬鹿。
何でいちいちソース書き換える必要あるの?
双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。
0803デフォルトの名無しさん
2006/02/15(水) 20:56:11}
0804デフォルトの名無しさん
2006/02/15(水) 21:00:26俺オブジェクトとお前オブジェクト云々ってのは、インスタンスじゃないよね?
クラスという意味でオブジェクトって言葉使っているのなら、ちょっとアレだ。
0805デフォルトの名無しさん
2006/02/15(水) 21:03:53中略
};
protected で継承した B の public メソッドの一部だけ、
A の public メソッドとして外から見えるようにするには
どうすればいいですか?
同名のメソッドを作ってスルーするしかありませんか?
void A::foo() {
B::foo();
}
みたいに。
0806デフォルトの名無しさん
2006/02/15(水) 21:05:31一部だけを見えるようにする言語仕様はありません。
書いているようにするのが一番単純な方法。
0807デフォルトの名無しさん
2006/02/15(水) 21:07:44>そもそもお前の書くソースは100人居たら「俺」に対する「お前」、「お前」対する「俺」のコード、
>つまり、100X100の一万件分ソースを書くということか?
>苦労だけ一丁前で全然金にならないなw
C++にはtemplateがあるって知ってるかい?
templateを使えば「俺」に対するX、「お前」に対するYのコード、
つまり100*2のソースで十分だ。
事実STLは、データ構造の件数*アルゴリズムの件数の定義があるんじゃなくて、
templateを使い、データ構造の件数+アルゴリズムの件数しか定義せずに済ましている。
君のように阿呆みたいなコード量の爆発は起きない。
0808デフォルトの名無しさん
2006/02/15(水) 21:11:00たまに std::vector<T> を継承してちょっぴり
付加機能を付けたコンテナクラスを作ることがあるんですが、
使わないメソッドは隠蔽しておこうとして protected/private
継承すると、結局使いたい一部のメソッドも見えないよなぁ、
って悩んでました。
inline にしたらオーバーヘッドも少なそうだし、
あとはコンパイラの最適化を信じることにします。
0809デフォルトの名無しさん
2006/02/15(水) 21:11:17>君のように阿呆みたいなコード量の爆発は起きない。
STL はコンパイルすると、実質的なコード量が爆発するんだが・・・
0810デフォルトの名無しさん
2006/02/15(水) 21:13:24それは継承じゃなくて、集約にしたほうがいい。
0811デフォルトの名無しさん
2006/02/15(水) 21:15:34コンテナを保持しとけってことですか?
0812デフォルトの名無しさん
2006/02/15(水) 21:17:33struct A{void fn(){}};
class B:protected A{
public:
using A::fn;
};
0813デフォルトの名無しさん
2006/02/15(水) 21:20:18using namespace OreNo::Kuukan;
しか使ったことなかった・・・
0814デフォルトの名無しさん
2006/02/15(水) 21:33:360815デフォルトの名無しさん
2006/02/15(水) 21:35:070816デフォルトの名無しさん
2006/02/15(水) 21:37:150817デフォルトの名無しさん
2006/02/15(水) 21:40:35オブジェクト指向的?にはそうかもしれないけど、
それだと>812みたいに出来ないからなぁ。
まあインライン関数をずらずら並べるのとあまり違いはない気もするが。
>816
いやその理屈はおかしい。
0818デフォルトの名無しさん
2006/02/15(水) 21:41:10そんな事態を起こさないためのprotected/private継承。
クラス内だけ気を付ければよくなる。
0819デフォルトの名無しさん
2006/02/15(水) 21:41:220820デフォルトの名無しさん
2006/02/15(水) 21:41:30publicならともかく元の質問はprivate/protectedだろ?
基底クラスのポインタにそもそもキャストできんよ。
だから、その問題はこれとは関係ない。
まぁprotected継承しなくても集約で良いやん的な気分なのは俺もだが
0821デフォルトの名無しさん
2006/02/15(水) 21:42:15そんな馬鹿な・・・
盲目的にそう信じるのは馬鹿だと思うぞ。
特にデータメンバに変更が無く、
便利なメソッドを追加するような継承では全く問題がない。
0822デフォルトの名無しさん
2006/02/15(水) 21:44:070823デフォルトの名無しさん
2006/02/15(水) 21:45:180824デフォルトの名無しさん
2006/02/15(水) 21:56:41>>821
ワロス
どうしてこういう無能がホームページなんか作っちゃうんだろうねぇ
0825デフォルトの名無しさん
2006/02/15(水) 22:15:07許してやってくれ。
0826デフォルトの名無しさん
2006/02/15(水) 22:17:25これらが相互参照じゃなく自己参照だと言い張るのはかまわんが、
グラフとかもあるしな。
ジェネティックとかになるとどこがどうつながってるのかは
人には判断できねーよ。
0827デフォルトの名無しさん
2006/02/15(水) 22:17:590828デフォルトの名無しさん
2006/02/15(水) 23:39:14正確にはこう。
「publicな非仮想デストラクタを持つクラスから継承してはならない」
それ自体はインスタンスを作らない、派生クラスのための
Mix-inベースクラスとかは、protectedな非仮想デストラクタを持たせる。
0829デフォルトの名無しさん
2006/02/16(木) 01:07:19C++ 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いつまでもバカなネタ引っ張るなよ
0831デフォルトの名無しさん
2006/02/16(木) 01:15:14「問題の起こらない処理系」などない。
問題が起こる場面では、どんな処理系でも問題が起こる。
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は?「問題が起こらない場面」があるから誤解の元になるんだろ?
0833デフォルトの名無しさん
2006/02/16(木) 01:22:54それは「問題はあるが実害が無い」場面が多いだけで
「デストラクタが実行されない」というバグは厳然として存在する。
お前みたいなバカがバグを量産してるんだな。
0834デフォルトの名無しさん
2006/02/16(木) 01:25:45ごめんよ。
君の頭の中で問題と実害が明確に区別されているなんて知らなかったんだ。
0835デフォルトの名無しさん
2006/02/16(木) 02:09:45もし、仕事でCを使うことになった時、どの程度までできれば役に立てますか?
また、GUIプログラミングもできないとやっぱりキツイんでしょうか・・・?
0836デフォルトの名無しさん
2006/02/16(木) 02:21:33それはCでなんの仕事をするかで、変わるものと思われます
0837デフォルトの名無しさん
2006/02/16(木) 02:24:28>つまりデータメンバに追加が無くても、
0838デフォルトの名無しさん
2006/02/16(木) 03:11:590839デフォルトの名無しさん
2006/02/16(木) 03:26:47...
delete rect;
とかやらんでしょ
0840デフォルトの名無しさん
2006/02/16(木) 05:07:26>何でいちいちソース書き換える必要あるの?
>双方のクラスの共通の基底クラスへのポインタを使えば住む話じゃん。
はぁ?底無しの馬鹿だな。
基底が同じもんしか循環させないのか?
0841デフォルトの名無しさん
2006/02/16(木) 05:10:01お前はプログラマ辞めるどころか、もう死んじゃっていいと思うよw
テンプレートの話なんて誰もしてないよ。
だいたい、設計でテンプレートの話なんて出てくる時点で頭おかしい。
0842デフォルトの名無しさん
2006/02/16(木) 05:53:38はっきりわかるスレですね。
うまいとか,うまくねえとか,他人(ひと)のやってるのをきいて,
そういうことを言うについちゃァ,別にモノサシがあるわけじゃァありませんが,
まァ,他人のはなしィきてみて,「こいつァ,オレよりまずいな」と思ったら,
まず自分と同じくらいの芸ですよ。人間にゃ誰だって,
多少のうぬぼれがありますからね。
「オレと同じくれえかな」と思うときは,向こうのほうがちょいと上で,
「こいつァ,オレより,たしかにうめえや」と感心した日にゃァ,
それゃァ,もう格段のひらきがあるもんですよ。
0843デフォルトの名無しさん
2006/02/16(木) 06:04:17技術で勝てないと知ると別の手段にでるところとか或る意味プログラマ向きだと思うよw
0844デフォルトの名無しさん
2006/02/16(木) 06:37:38おまいが某氏の blog に出入りしているところまで読んだ
0845デフォルトの名無しさん
2006/02/16(木) 07:28:380846デフォルトの名無しさん
2006/02/16(木) 09:47:010847デフォルトの名無しさん
2006/02/16(木) 09:55:540848デフォルトの名無しさん
2006/02/16(木) 10:25:020849デフォルトの名無しさん
2006/02/16(木) 10:56:300850デフォルトの名無しさん
2006/02/16(木) 11:47:050851デフォルトの名無しさん
2006/02/16(木) 12:06:30>>788
おっしゃる通りでして、私も最初は自前クラスで書き出してしまおうと思ったのですが、
RSSのバージョン変化への対応等、将来のメンテナンス性や、拡張性等を鑑みて、
何らかの標準的な物が有るならば、それに乗っておいた方が良いかなと思い、調べていた次第です。
今回は、VC++6.0用に、自前でサックリと書き出しルーチンを作っておいて、
将来APIが、.NETなり、2005なりに対応した時点で、
置き換えられる様にコーディングするつもりです。
レスありがとうございました。>各位
0852デフォルトの名無しさん
2006/02/16(木) 14:13:080853デフォルトの名無しさん
2006/02/16(木) 14:15:450854デフォルトの名無しさん
2006/02/16(木) 14:29:55ありがとうございます
0855デフォルトの名無しさん
2006/02/16(木) 16:38:01その手のパズルは自分で解く事に意味がある。
0856デフォルトの名無しさん
2006/02/16(木) 16:41:16まあプログラムに問題を解かす作業は特に楽しくないけどな。
0857デフォルトの名無しさん
2006/02/16(木) 17:54:53xは150
yは50
[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]
はどうしたら、表示されますか?
0858デフォルトの名無しさん
2006/02/16(木) 18:13:47puts("xは150\n"
"yは50\n"
"[xとyの和は 200][差は 100][積は 7500][商は 3][余は 0]\n");
0859デフォルトの名無しさん
2006/02/16(木) 20:48:09#include <ddeml.h> とすると大量にエラー出て使えません。
どうしたら良いでしょうか。
0860デフォルトの名無しさん
2006/02/16(木) 21:00:34C++/CLIの方がいいと思います
0861デフォルトの名無しさん
2006/02/16(木) 21:05:29ここはManagedのスレではありません
0862デフォルトの名無しさん
2006/02/16(木) 21:35:43そのままunsigned short型でファイルに出力するにはどうすればいいですか?
fwrite(配列名,sizeof(unsigned short),配列のサイズ,fpw);
↑こうやったら何か正しく出力されなかったんですが・・
0863デフォルトの名無しさん
2006/02/16(木) 21:43:330864デフォルトの名無しさん
2006/02/17(金) 00:22:52別ファイルでも使えるグローバル変数を作りたいんですが
方法を教えてください。
0865デフォルトの名無しさん
2006/02/17(金) 00:24:35extern
0866デフォルトの名無しさん
2006/02/17(金) 00:27:590868デフォルトの名無しさん
2006/02/19(日) 13:13:03メモ帳に書いたものを.cppになおしてからファイル名.exeってやってるのに
「内部コマンドまたは外部コマンド操作可能なプログラム
またはバッチファイルとして認識されていません」
ってでるんだけどなんで?
VSを普通に起動して手順通りに進めばできるんだけど
上のやり方で手軽にやる方法はどうしたらいいの?
0869デフォルトの名無しさん
2006/02/19(日) 13:15:58:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_ ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ ├┤|
0870デフォルトの名無しさん
2006/02/19(日) 13:17:080871デフォルトの名無しさん
2006/02/19(日) 19:16:590872デフォルトの名無しさん
2006/02/19(日) 19:35:580873デフォルトの名無しさん
2006/02/19(日) 20:54:38nMail.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:21implib.exeでインポートライブラリ作ってリンクするかLoadLibrary&GetProcAddressしる
0875デフォルトの名無しさん
2006/02/19(日) 21:01:470876デフォルトの名無しさん
2006/02/19(日) 21:40:38ありがとうございます!libファイルをバッチで作るものがあるとは知りませんでした。
>>875
VisualCなどのlibはついてたのですが、それだとうまくメイクできなくて…。
作ったlibをメイク環境に追加したらできました。
ありがとう!
0877デフォルトの名無しさん
2006/02/19(日) 23:45:42どこで指定していますか?
WNDCLASSというhIconというところですか?
0878デフォルトの名無しさん
2006/02/19(日) 23:59:37というよりEXEファイルのリソース。
WNDCLASS::hIconはそのリソースを使うところ。
WNDCLASS::hIconの中身がEXEのアイコンになるのではなくて、
EXEのアイコンをWNDCLASS::hIconに指定している。
0880デフォルトの名無しさん
2006/02/20(月) 09:47:29class 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そのconstにどんな意味を持たせたいの?
0882デフォルトの名無しさん
2006/02/20(月) 09:50:52static ではないメンバ関数では this の型が A* から A const* になるわけだが、
this を持たない static 関数で、どんな効果を期待してるの?
0883デフォルトの名無しさん
2006/02/20(月) 10:02:45static なメンバ変数を変更しない事を明示したいです。
不用意にいじっってるコードがあれば指摘して欲しいです。
0884デフォルトの名無しさん
2006/02/20(月) 10:23:000885デフォルトの名無しさん
2006/02/20(月) 10:33:15Get() の中で Set() を呼び出した場合とか、
関数ポインタ &A::Get の型をどうするか?とか、
規格化するにあたって問題が多そう。
0886デフォルトの名無しさん
2006/02/20(月) 10:33:50staticな部分をクラス化して、そのクラスのインスタンスをstaticメンバ変数にでもしたら?
0887デフォルトの名無しさん
2006/02/20(月) 15:12:00たとえば、
char str[100];
//初期化
for (i=0; i<100; i++)
{
str[i] = NULL;
}
というふうにです。100回もループを回すのはなんかもったいない気がして。
0888デフォルトの名無しさん
2006/02/20(月) 15:16:59char str[100] = {'\0'};
残りは自動的に '\0' が入る。
というか char に NULL 代入するなよ・・・・
0889デフォルトの名無しさん
2006/02/20(月) 15:18:32ありがとうございます!
charにNULL代入するのはおかしいですか?
\nは終了コードですよね?
0890デフォルトの名無しさん
2006/02/20(月) 15:19:230891デフォルトの名無しさん
2006/02/20(月) 15:24:46人間だもの
0892デフォルトの名無しさん
2006/02/20(月) 15:30:17NULLと\0の違いがよく分かってないんです。
このあたりを書いてあるWEBページもあんまりないみたいで…。
0893デフォルトの名無しさん
2006/02/20(月) 15:33:07いい加減な本やサイトが多いし。
しかし個人で規格書を買うと高く付く。学校においてあるPDFを
閲覧するとかすればよい。
JISなら日本語でも読める。
0894デフォルトの名無しさん
2006/02/20(月) 15:34:02(後はごにょごにょ
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は”改行コード”で調べるといっぱい出るぞ
0897896
2006/02/20(月) 15:45:18間違えたが反省しない
0898デフォルトの名無しさん
2006/02/20(月) 15:58:160899デフォルトの名無しさん
2006/02/20(月) 16:11:04K&R C第2版読め じゃダメなんかな
0900デフォルトの名無しさん
2006/02/20(月) 16:15:00NULLはヌルポインタ用。
C++ではvoid*型から他のポインタ型へ暗黙の変換ができないからそうなっているだけ。
ちなみに規格によるとNULLは「処理系定義の空ポインタ定数」となっている。
0901デフォルトの名無しさん
2006/02/20(月) 16:39:410902896
2006/02/20(月) 16:56:190903デフォルトの名無しさん
2006/02/20(月) 18:20:18必ずサイズの分かってる配列ならmemsetでもしてろ
>>896
で、おまいさんの調べたのはWindowsってオチだろ?
NULL = 0なのは代表的な処理系でそうなってるだけで、
NULL = 0とC++が規定してるわけじゃない
0904デフォルトの名無しさん
2006/02/20(月) 18:28:20> NULLと\0の違いがよく分かってないんです。
\0 → 文字定数or文字列定数中に整数値0を記述するためのエスケープ文字
NULL → 何のオブジェクトも指していない事を示す特別なポインタ値
0905Windows xp home
2006/02/20(月) 18:39:34irvine1.1.2 のメニューとダイアログが文字化けします。
助けてください。お願いしますッ。
0906デフォルトの名無しさん
2006/02/20(月) 18:43:18>NULL = 0とC++が規定してるわけじゃない
4.10の1によると、null pointer constant(空ポインタ定数)とは0に評価される整定数式のことだから、
実質的に0だといえるんじゃないか?
#define NULL (1 - sizeof 'h')
みたいなのも許されると思うけど。
>>905
ソフトウェアについての質問はソフトウェア板でどうぞ。
0907デフォルトの名無しさん
2006/02/20(月) 18:53:59NULL==0は確かに全ての規格合致処理系において保証されてるが
その内部符号は未定義だからそこは分けておいた方がいいだろう
0908デフォルトの名無しさん
2006/02/20(月) 20:14:02それは、Cソース上で「0」がポインタとして解釈される時、
NULLとして扱われるという事だね。
# つまり、「if( NULL )」が偽となる
>>903が言いたいのは、実行時にNULLのビットパターンが、
「All bit 0であると言う保証はない」と言う事だろう。
0909デフォルトの名無しさん
2006/02/20(月) 20:22:38必要条件と十分条件が入れ替わってる希ガス
0910デフォルトの名無しさん
2006/02/20(月) 22:52:42http://www.kouno.jp/home/c_faq/c5.html
0911デフォルトの名無しさん
2006/02/20(月) 23:02:200912デフォルトの名無しさん
2006/02/21(火) 05:57:19よく、メッセンジャやスカイプで、新着通知に下からポップアップウィンドが上がってきますが、あれはどうやって実装しているのでしょうか?
まさか全部自作?
環境は、VC6.0のXPです。よろしくお願いします。
0913デフォルトの名無しさん
2006/02/21(火) 07:11:540914デフォルトの名無しさん
2006/02/21(火) 08:43:190915デフォルトの名無しさん
2006/02/21(火) 08:49:370916デフォルトの名無しさん
2006/02/21(火) 08:50:26っていう名前のラブホがあったよね。
0917デフォルトの名無しさん
2006/02/21(火) 11:35:060918デフォルトの名無しさん
2006/02/21(火) 14:10:490919デフォルトの名無しさん
2006/02/21(火) 15:22:08クラスBに
vector<int> m_vHoge;
クラスCに
vector<double> m_vHoge;
がそれぞれメンバとして定義されているものとします.
このとき,基本クラスAに,m_vHoge に対して,
vector としての操作をするような関数を
定義するようなことはできますか?
できるならどのようにしたらいいのでしょうか?
0920デフォルトの名無しさん
2006/02/21(火) 15:33:21仮想関数かテンプレート
0921919
2006/02/21(火) 15:53:51すいません
愚かな私にいま少し具体的に示唆していただければ幸いです
0922デフォルトの名無しさん
2006/02/21(火) 16:07:58柴田望洋のC言語 入門編を読んで勉強をしているのですが、
全てのリストを写して実行した方がいいのでしょうか。
演習だけやれば身に付くものなのでしょうか。
他の本にも言えることだと思うので、アドバイスお願いします。
0923デフォルトの名無しさん
2006/02/21(火) 16:08:09もちろん vertual で =0 な純粋仮想関数として。
で、 class B と class C でその関数の中身をを実装する。
忘れないように class A のデストラクタも仮想デストラクタにしよう。
0924デフォルトの名無しさん
2006/02/21(火) 16:08:56どんなサンプルでもやってみるのがいいよ。
その本に限らずに。
「わかる」と「できる」は違う。
0925デフォルトの名無しさん
2006/02/21(火) 16:09:580926デフォルトの名無しさん
2006/02/21(火) 16:14:19そうですか。じゃあ頑張ってみます。
有り難うございました。
0927919
2006/02/21(火) 16:29:16ロジックがまったく同じで,
型だけが違う,という場合はどうしますか?
0928デフォルトの名無しさん
2006/02/21(火) 16:38:54vectorの要素の型だけ違っていればいい、というのであれば、テンプレートかな。
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それ、前に悩んだことがある。
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:59unsigned 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なりません
0933デフォルトの名無しさん
2006/02/22(水) 00:41:30つーかやってみろよ
0935デフォルトの名無しさん
2006/02/22(水) 00:49:400936デフォルトの名無しさん
2006/02/22(水) 01:01:00> カフェでCの宿題しています。
これ無理。
0937デフォルトの名無しさん
2006/02/22(水) 01:59:38GetPrivateProfileString("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ネタじゃないなら、文字列操作について勉強してきなさい。
引き数の問題ではなく、コンパイラの言う通り比較の仕方が問題なのだから。
0939931
2006/02/22(水) 07:21:57とかどう見てもネタです、本当にありがとうございました
0940デフォルトの名無しさん
2006/02/22(水) 08:46:13何のための4番目、5番目の引数だと思ってるんだ。
で
#include<IniFiles.hpp>
TIniFile* ini = new TIniFile(buffer2);
if (ini->ReadString("Test1", "Test2", "Default") != "Default") {
//
}
こうすればいいとおもうお(;^ω^)
0941デフォルトの名無しさん
2006/02/22(水) 09:19:46# 「&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テンプレートの実装はヘッダファイルに書かなきゃダメよ
0944デフォルトの名無しさん
2006/02/22(水) 11:37:030945デフォルトの名無しさん
2006/02/22(水) 11:38:10結婚してくれ
0946デフォルトの名無しさん
2006/02/23(木) 09:24:270947デフォルトの名無しさん
2006/02/23(木) 09:25:590948デフォルトの名無しさん
2006/02/23(木) 09:38:08template <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<int>(n);
にマッチするようになってるから。
そうじゃないとhoge(100)とかもエラーになって困る。
0950デフォルトの名無しさん
2006/02/23(木) 10:16:33コンパイラ何? 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:360953デフォルトの名無しさん
2006/02/23(木) 10:29:34申し訳ありません(;´Д`)
「100という定数値が、テンプレートでint、const intどちらでマッチしても、」の間違いです…
0954デフォルトの名無しさん
2006/02/23(木) 15:20:07値 渡 し っ て 何 か わ か っ て ま す か
0955デフォルトの名無しさん
2006/02/23(木) 16:12:400956デフォルトの名無しさん
2006/02/23(木) 16:21:20constが無意味なのはこの際無視するって書いてあるだろ
テンプレートパラメータの類推が引数部を参考に行われるのか、
呼び出し元の型に準拠するのかが知りたいだけだと思われ
0957デフォルトの名無しさん
2006/02/23(木) 16:21:400958デフォルトの名無しさん
2006/02/23(木) 22:07:38VBでは扱えないハードウェアがありまして、CでDLLを作成して
そのDLLをVBで使うようにしたいんですが
普通のCとかで使うDLLと同じように書いても、VBで扱えるのでしょうか?
コールバック関数を登録したりしたいので、ポインタの受け渡しが必要になったりするのですが・・・・。
VBの事良く分からないので、的外れな事書いてるかも知れませんが、よろしくお願いします。
0959デフォルトの名無しさん
2006/02/23(木) 22:17:03タスクバーに出るポップアップウィンドウって、
どうやって出すんですか??
0960デフォルトの名無しさん
2006/02/23(木) 22:22:16VBというのがver.6以前のことか.net以降のことか分かりませんが、
どちらにせよ、可能です。
0961デフォルトの名無しさん
2006/02/23(木) 22:25:170962デフォルトの名無しさん
2006/02/23(木) 22:25:28自前
0963デフォルトの名無しさん
2006/02/23(木) 23:23:24コールバックは無茶。
0964デフォルトの名無しさん
2006/02/24(金) 00:01:24AddressOfでDLLに渡せるんじゃなかったっけ?
0965デフォルトの名無しさん
2006/02/24(金) 07:48:270966デフォルトの名無しさん
2006/02/24(金) 07:54:22公開(エクスポート)する関数もコールバック関数も全てstdcallを使うこと。
0967デフォルトの名無しさん
2006/02/24(金) 18:07:00何から手をつければよいかわかりません.
ACPIを使うのだと思うのですが,
参考になるドキュメントなどあるでしょうか?
0968デフォルトの名無しさん
2006/02/24(金) 18:27:450969デフォルトの名無しさん
2006/02/24(金) 20:14:310970デフォルトの名無しさん
2006/02/24(金) 20:17:520971デフォルトの名無しさん
2006/02/24(金) 20:20:000972デフォルトの名無しさん
2006/02/24(金) 20:26:050973デフォルトの名無しさん
2006/02/25(土) 15:20:350974967
2006/02/25(土) 17:47:46ttp://www.acpi.info/
このへんを読破しないといけないでしょうか?
DLLをロードして一発というわけにはいきませんか.
0975デフォルトの名無しさん
2006/02/26(日) 16:11:55http://www.misnet.co.jp/tech/download/opdown.htm
ここの使ったら?
ググったら一番上に来てた。
0976デフォルトの名無しさん
2006/02/26(日) 17:16:080977デフォルトの名無しさん
2006/02/26(日) 17:25:06ビット演算
0978デフォルトの名無しさん
2006/02/26(日) 17:26:53struct
0979デフォルトの名無しさん
2006/02/26(日) 17:30:36シフトとかを使えばいいんですね
0980デフォルトの名無しさん
2006/02/26(日) 18:22:33unionとビットフィールド
0981デフォルトの名無しさん
2006/02/26(日) 22:03:03フォントのビットデータを取得しようとしています。
以下のコードは、まずデータ取得に必要なサイズを調べているところですが、
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:35C++Builder、VisualC++、VisualC#などがありますが、最も応用範囲が広いのはどれでしょうか?
ドライバ開発、アプリケーション開発、計測制御など、幅広く使える環境を探しています。
0983デフォルトの名無しさん
2006/02/26(日) 22:09:46VisualC#:C++ではない言語の開発環境、ネイティブコードは得られない
何をしたいか知らんが、自ずと明らかかと
0984デフォルトの名無しさん
2006/02/26(日) 22:13:240985デフォルトの名無しさん
2006/02/26(日) 22:13:250986デフォルトの名無しさん
2006/02/26(日) 22:16:22Windowsを使うと言う前提では、最も範囲が広いのはVisual C++かと。
0987デフォルトの名無しさん
2006/02/26(日) 22:18:10妄想書き込んでんじゃねーよ
0988デフォルトの名無しさん
2006/02/26(日) 22:19:540989デフォルトの名無しさん
2006/02/26(日) 22:21:36ドライバはどれで作れますか?
0990981
2006/02/26(日) 22:46:55Win32API スレに行くべきでしょうか?
0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
2006/02/26(日) 22:51:30それが正解
0993981
2006/02/26(日) 22:54:510994982
2006/02/26(日) 23:00:33当方の開発環境を書き忘れました申し訳ありません。
開発環境はWindowsです。
やはり、融通が効くという意味ではVC++という選択になるのでしょうか。
同じC++でも、BCBではどのような点が不利になるのでしょうか。
ご教示願います。
0996982 ◆6vyQg.OGAA
2006/02/26(日) 23:10:46995は私ではありませんので。
0998デフォルトの名無しさん
2006/02/26(日) 23:14:350999デフォルトの名無しさん
2006/02/26(日) 23:15:291000デフォルトの名無しさん
2006/02/26(日) 23:17:08【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。