【初心者歓迎】C/C++室 Ver.29【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/07/08(土) 23:05:12ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2006/07/08(土) 23:08:210003デフォルトの名無しさん
2006/07/08(土) 23:11:13乙
0004デフォルトの名無しさん
2006/07/10(月) 19:48:50図書館で借りたため答えがついてないorz
問
$ ./calc 9 - 8 + 7 - 6 + 5 - 4 + 3 - 2 + 1
9 - 8 + 7 - 6 + 5 - 4 + 3 - 2 + 1 = 5
$
●入力した数式とその計算結果を表示してください
●演算は加算(+)と減算(−)をサポートして下さい
●数式の数値の入力個数には制限がないものとしてください
本当に初心者の質問なんですが・・・どうか御協力お願いします・・・
0005デフォルトの名無しさん
2006/07/10(月) 19:52:330007デフォルトの名無しさん
2006/07/10(月) 21:29:020008デフォルトの名無しさん
2006/07/10(月) 21:58:300009デフォルトの名無しさん
2006/07/10(月) 22:19:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2276.c
0010デフォルトの名無しさん
2006/07/11(火) 04:32:10上記ソースはVisualStudio2005でfor_eachを使ったサンプルソースなんですが
ソース内のvoid operator()(int elem) \ の\が何を意味するのかがわかりません。
どなたかわかる人、教えてください。お願いします。
0011デフォルトの名無しさん
2006/07/11(火) 04:52:59行末のバックスラッシュは改行文字をエスケープするわけだけど、
その例では何の役にも立ってない気がする。
0012デフォルトの名無しさん
2006/07/11(火) 09:16:31確かに意味が無いようで、消してもエラーにはなりませんでした
ただ、何か意図があって、\を付加したと思うので、気になってしまいます。
0013デフォルトの名無しさん
2006/07/11(火) 09:24:500014デフォルトの名無しさん
2006/07/11(火) 13:51:56a[100]と宣言したのを、後でa[500]まで伸ばすっていう。
配列じゃなくてポインタを使って、
int *p;
p = (int *) malloc(sizeof(int) * 100);
...
p = (int *) realloc(p, sizeof(int) * 500);
とすれば配列を伸ばすのとほぼ同じようなことが出来るのかな
0015デフォルトの名無しさん
2006/07/11(火) 14:03:120016デフォルトの名無しさん
2006/07/11(火) 14:32:41realloc が失敗した時に悲しくなるから
一度別のポインタに入れてヌルチェックしてから
p に入れたほうがいいよ。
0017デフォルトの名無しさん
2006/07/11(火) 14:59:52?
0018デフォルトの名無しさん
2006/07/11(火) 15:10:00reallocに失敗した場合、元の領域は解放されない。
上の場合問答無用でpに上書きしてるので、失敗した場合元の領域のポインタを失ってしまう。
0019デフォルトの名無しさん
2006/07/11(火) 19:38:38実行後のプログラムの動作が異なる場合、どんなミスを疑ったらいいんでしょうか?
2週間ほど悩んでおります
0020デフォルトの名無しさん
2006/07/11(火) 19:41:280021デフォルトの名無しさん
2006/07/11(火) 20:14:500022デフォルトの名無しさん
2006/07/11(火) 20:35:51string m;
public:
string &x(){
return m;
}
};
int main(){
A a;
a.x()="aaa";
cout << a.x() << endl;
return 0;
}
このようなコードがあるとき、mainを変えずに、a.x()で値を取得するときと、a.x()=で値を代入
するときとで挙動を変えることはできるのでしょうか。
x()の返り値を別なクラスにして、operator=とoperator string()などを使えばできそうで
もうすこし簡単にやる方法はありますか?
0023デフォルトの名無しさん
2006/07/11(火) 20:41:36> x()の返り値を別なクラスにして、operator=とoperator string()などを使えばできそうで
普通はこうする
0024デフォルトの名無しさん
2006/07/11(火) 20:54:090025デフォルトの名無しさん
2006/07/11(火) 21:02:43つか意味あるのって感じ
002619
2006/07/11(火) 21:27:42そうだとは思っているのですがいかんせん原因が全くつかめません
>>21
2次元配列の初期化をfor文の2重ループでしていますが、
コンパイルによっては初期化が正しくなされていなかったりしているような状態にはなります
0027デフォルトの名無しさん
2006/07/11(火) 21:31:40まずは症状が再現する最小限のソースをうp
002819
2006/07/11(火) 21:43:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2325.txt
2次元配列を使った○×ゲームのプログラムです
以前宿題解決スレのほうにも書いたものとほぼ同じですが結局回答が得られないままです
0029デフォルトの名無しさん
2006/07/11(火) 21:50:070030デフォルトの名無しさん
2006/07/12(水) 12:39:39class C {
size_t b_size;
struct {
int a;
int b[];
int c;
...
} st;
};
↑のようなクラスを作りたいのですが、st の中身をバイトストリームから直に読み込むので
a, b[0], b[1], ... b[b_size-1], c ... が連続した領域に確保されるようにしたいです。
b_size の値はコンストラクタが呼ばれたときにはまだ分かりません。こういうのを作ることは可能ですか?
int *data メンバを作って
int a() { return data[0]; }
int b(int i) { return data[1 + i]; }
int c() { return data[b_size + 1]; }
とかしこしこ書いていったほうがいいですか?
0031デフォルトの名無しさん
2006/07/12(水) 12:58:20各メンバが連続して配置されなくてもいいように、
バイトストリームから読み込むべき。
読み込むときに連続して読み込むことと、
読み込んだデータを格納しておく時に連続させることは別問題。
0032デフォルトの名無しさん
2006/07/12(水) 22:35:41const char* について質問です。
const char* hoge = "Hello";
char* foo = hoge;
をすると、「error C2440: '初期化中' : 'const char *' から 'char *' に変換できません。変換で修飾子が失われます。」
とエラーが出ます。
どうしたらいいんですか?
環境
Visual C++ 2005 EE
WindowsXP + SP2
0033デフォルトの名無しさん
2006/07/12(水) 22:43:02その状況でやると危険だぞ。
0034デフォルトの名無しさん
2006/07/12(水) 22:45:250035デフォルトの名無しさん
2006/07/12(水) 22:48:46初心者には何が危険かちゃんといってあげなきゃわかんないよ。
とかいってる私もわかんないんだけど。
0036デフォルトの名無しさん
2006/07/12(水) 22:53:32foo を削除して、かわりに hoge を使えばいいよ。
0037デフォルトの名無しさん
2006/07/12(水) 22:56:36文字列リテラルを変更する危険がある。
文字列リテラルを変更した場合は未定義動作。
0038デフォルトの名無しさん
2006/07/12(水) 23:16:310039デフォルトの名無しさん
2006/07/13(木) 00:45:05{
private:
enum { A=0, B, C };
const char str[][32] = {"A","B","C"};
};
こんなのってダメでした?
0040コンパイラが変?
2006/07/13(木) 00:55:15{
public:
A(){};
operator=(A &other){};
operator<<(A &other){};
};
class B : public A
{
public:
B(){};
};
int main(void)
{
A aa ; B bb ;
// bb = aa ; こっちはコンパイルエラーになります。
bb << aa ;//こっちはOK。
return 0;
}
0041デフォルトの名無しさん
2006/07/13(木) 00:56:43operator=もoperator<<も戻り値の型が指定されていない。
メンバ関数の定義の終わりにセミコロンは要らない。
0042デフォルトの名無しさん
2006/07/13(木) 00:57:58strが静的メンバでも良ければ対処のしようがある。
0043デフォルトの名無しさん
2006/07/13(木) 01:00:47基底クラスのメンバは派生クラスの同名のメンバによって隠される。
operator= はユーザーが宣言しない場合もコンパイラがデフォルトの宣言を
追加してしまうので、常に宣言されることになり、常に隠される。
あと >>41 ね。
004440
2006/07/13(木) 01:01:29サンクス。直した。
class A
{
public:
A(){};
void operator=(A &other){}
void operator<<(A &other){}
};
class B : public A
{
public:
B(){};
};
int main(void)
{
A aa ; B bb ;
bb = aa ;
bb << aa ;
return 0;
}
0046デフォルトの名無しさん
2006/07/13(木) 01:52:020047デフォルトの名無しさん
2006/07/13(木) 02:22:05n = 5,10,15,…,50のときの近似値を表示させるプログラムなのですが、
↓のプログラムだとエラーが出てしまいます。どこをどう直せば動作するのか教えてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2338.txt
0048デフォルトの名無しさん
2006/07/13(木) 02:32:37004947
2006/07/13(木) 02:35:480050デフォルトの名無しさん
2006/07/13(木) 02:38:51配列は固定長で確保
double y1[101];
可変長配列のサポートはC99から
005147
2006/07/13(木) 02:46:02あ、配列の長さを固定したら動作しました。
夜遅くにわざわざありがとうございます(´▽`)
0052デフォルトの名無しさん
2006/07/13(木) 11:11:18とりますが
関数の引数としてポインタのポインタを渡す理由は
なんでしょうか?
大きな構造体を渡す際のメモリコピーを避けるためなら
ポインタのポインタでなくてポインタだけで十分だと
思うのですが
0053デフォルトの名無しさん
2006/07/13(木) 11:23:580055デフォルトの名無しさん
2006/07/13(木) 12:00:36* ビットマップ用のメモリ確保
* ピクセルから値の取得
* ピクセルに値を設定
* 画像のファイルからの読み込み
* 画像のファイルへの書きだし
ぐらいのことをやりたいのですが、適切なライブラリを教えてください。
画像のフォーマットは一般的なものならなんでもいいです。 pnm とかでも可。
多機能でなくていいので、なるべく小さなライブラリを探しています。
開発環境は linux + gcc です。
0056デフォルトの名無しさん
2006/07/13(木) 12:10:41typede char* CharPtr;
と置き換えれば多少は分かりやすかろう。
CharPtr p; // ポインタ
CharPtr* pp = &p; // ポインタのポインタ
005754
2006/07/13(木) 12:16:25ありがとうです
ということは
ポインタのポインタ=ポインタのアドレス
でOKてことですね
>>55
libjpegってそのものずばりなのがあるが
0058デフォルトの名無しさん
2006/07/13(木) 12:23:17単体のフォーマットでよければlibpng, libjpeg, libgifなどなど
色々扱いたければDevILとか
ライセンスに緩い物であればFreeImageあたりか
0059デフォルトの名無しさん
2006/07/13(木) 13:58:13クラスのオブジェクトでは、メンバ変数はクラスで記述した順番にメ
モリ配置されますか?
class A {
int m;
int n;
};
とするとAのオブジェクトtempのメモリ構造は|m用の領域|n用の領域|
の様になるのでしょうか?それとも環境に依存するのでしょうか?
0060デフォルトの名無しさん
2006/07/13(木) 13:59:03そもそも変数の型の名前としてアドレスという言葉を使うのは間違い。
CharPtr p; // アドレス
CharPtr* pp = &p; // アドレスのアドレス
と言ったら違和感が伝わるだろうか
0062デフォルトの名無しさん
2006/07/13(木) 16:11:59折角ポインタのポインタって教えてるのに強硬にアドレスアドレスってw
0063デフォルトの名無しさん
2006/07/13(木) 17:57:15>>59
ドット演算子やアロー演算子を利用したアクセスは保証される。
メモリ上の配置が宣言通りの順で格納されている保証はない。
0064デフォルトの名無しさん
2006/07/13(木) 18:46:16ppはキャラ変数のアドレスを指すポインタのアドレスを指すポインタです。
・・・素直にポインタのポインタで納得していただけんだろうか
0065デフォルトの名無しさん
2006/07/13(木) 18:53:05お前、ポインタのこと良く分かってないだろ
0066デフォルトの名無しさん
2006/07/13(木) 18:55:02intの並びでも保障されないの?
0067デフォルトの名無しさん
2006/07/13(木) 19:18:16ちりぬるを
わかよたれそ
つねならむ
うゐのおくやま
けふこえて
あさきゆめみし
ゑひもせす
外部ファイルにこのような文字列が登録されています。
指定した行にある文字列を指定した配列に書き出したいのですが、どうしたらよいのでしょうか?
0068デフォルトの名無しさん
2006/07/13(木) 19:19:31> 後で宣言されたデータメンバの方が、クラスオブジェクト内でより高位のアドレスになるように
> 割り当てられる。
> アクセス指定子で分離された非静的メンバの割り当て順序は、未規定とする。
> 処理系によっては、境界調整の必要性から、二つの連続するメンバの一方を
> 他方の直後に割り付けないことも起こりうる。
0069デフォルトの名無しさん
2006/07/13(木) 20:00:08つまり、どういうこと?
0070デフォルトの名無しさん
2006/07/13(木) 20:20:34どこが?
0071デフォルトの名無しさん
2006/07/13(木) 20:32:08(プログラミング言語C++第三版)
これ、半分以上〜全部覚えていかないと、C++ってものにならないんですか?
0072デフォルトの名無しさん
2006/07/13(木) 20:34:31>>59の例に限れば保証される。
これは保証されない。
class B {
public:
int o;
private:
int p;
};
0073デフォルトの名無しさん
2006/07/13(木) 20:40:080074デフォルトの名無しさん
2006/07/13(木) 20:41:12どこもかしこも
0075デフォルトの名無しさん
2006/07/13(木) 20:42:33読む必要があるか? No
読んだ方がいいか? Yes
覚えないといけないか? No
理解する必要があるか? Yes
>半分以上〜全部覚えていかないと、C++ってものにならないんですか?
それはあなた次第
0076デフォルトの名無しさん
2006/07/13(木) 20:44:13ありがとう。
あきらめますorz
0077デフォルトの名無しさん
2006/07/13(木) 20:44:20そうだよ。まあでもよく使うことは自然と実に付くし、あまり使わないことは当然知らなくても困らない。
それに、ほかの言語はもっと覚えることが少ないかというとそうでもない。どれも似たようなもの。
0078デフォルトの名無しさん
2006/07/13(木) 20:45:32ほかの言語でも同じですか。
やっぱり、がんばります。
ありがとうございました。
0079デフォルトの名無しさん
2006/07/13(木) 20:54:250080デフォルトの名無しさん
2006/07/13(木) 20:59:50仕事で書いてるプログラムに3000行のswitch文があるんだが、
これを短く圧縮する場合にifにするのは馬鹿げてるよね?
0081デフォルトの名無しさん
2006/07/13(木) 21:00:450082デフォルトの名無しさん
2006/07/13(木) 21:00:59文字列操作とか。
0083デフォルトの名無しさん
2006/07/13(木) 21:07:02書き換えるとハマる悪寒。
switch..case はそのままで
中身の処理をサブルーチンとして抜き出すぐらいにしとけば?
0084デフォルトの名無しさん
2006/07/14(金) 06:01:03case 1:
case 2:
case 3:
処理
break;
case 4:
case 5:
case 6:
処理
break;
.....
case 32765:
case 32766:
case 32768:
処理
break;
default:
処理
}
みたいにマヌケな状況になってるなら if 使う意味はあるね
0085デフォルトの名無しさん
2006/07/14(金) 06:04:300086デフォルトの名無しさん
2006/07/14(金) 08:38:40>>85の関数テーブルで飛ばす
とは具体的にどういうコードなんでしょうか?
0087デフォルトの名無しさん
2006/07/14(金) 09:37:01switch文を関数テーブルに直してくれるよ。
0088デフォルトの名無しさん
2006/07/14(金) 10:32:38こいつのほうがわかってなさそう
0089デフォルトの名無しさん
2006/07/14(金) 11:07:12「ppはポインタのアドレスを指すポインタですね」と相手が納得しているのに
わざわざ言い換えるところが間抜け
0090デフォルトの名無しさん
2006/07/14(金) 11:09:53sizeof() でインスタンスのサイズを調べると、メンバ変数の分しかメモリ領域が
確保されていないようなのですが、メンバ関数はどう言う風に実装されているんですか?
今までは、すべてのインスタンスでメンバ関数は共有されていて、呼び出されたときに
インスタンスの情報も一緒に渡されて、メンバ変数の参照が出来るのかなと思っていたのですが
関数にstatic指定子を付けたらメンバ変数にアクセスできなくなったので
もしかしたら違うのかなと。
0091デフォルトの名無しさん
2006/07/14(金) 11:15:26>インスタンスの情報も一緒に渡されて、メンバ変数の参照が出来るのかなと思っていたのですが
コンパイラ依存だと思うが、VC++の場合はこういう実装になっている。
>関数にstatic指定子を付けたらメンバ変数にアクセスできなくなった
staticメンバ関数として当然の挙動です。
0092デフォルトの名無しさん
2006/07/14(金) 11:20:13仮想関数がある場合は'vtbl'というものが追加されて、そのポインタ分だけ
sizeofが大きくなる。
仮想関数がない場合は'vtbl'はないので、構造体と同じしくみでsizeが決定される。
メンバ関数内でメンバ変数が参照できるのは、各メンバ変数にthisが渡されるため。
0093デフォルトの名無しさん
2006/07/14(金) 11:21:10↓
各メンバ関数にthisが渡されるため
0094デフォルトの名無しさん
2006/07/14(金) 11:26:50レスどうも。おかげですっきりしました。
staticメンバのことも了解しました。
仕様上そう設計しているということですね。
0095デフォルトの名無しさん
2006/07/14(金) 11:42:42リロードしないで書き込んでしまったので、入れ違いになってしまいましたが
とても参考になりました。
今BCCで試してみましたが、仮想関数があると先頭に4byte分
なんか付いているみたいでした。
0096デフォルトの名無しさん
2006/07/14(金) 11:58:39その4byteが'vtbl'へのポインタ。
vtblが何者であるかはググって
0097デフォルトの名無しさん
2006/07/14(金) 12:44:590098デフォルトの名無しさん
2006/07/14(金) 12:49:210099デフォルトの名無しさん
2006/07/14(金) 12:52:26おまえが間抜け。その解釈が合っていると思ってるのか?
型名にアドレスなんて使っちゃダメ。
自分の中で納得するのは勝手だが、「ポインタのアドレスを指すポインタ」なんて
他人に言ったら間違いなく伝わらない。「ああ、ポインタのポインタの事ね」って呆れ顔で訂正されるだけ。
中途半端な知識で初心者に嘘教えるなよ。
0100デフォルトの名無しさん
2006/07/14(金) 12:55:08じゃ、ポインタって何?説明して
0101デフォルトの名無しさん
2006/07/14(金) 12:59:11Wikipediaでも見とけアホ
ttp://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
0102デフォルトの名無しさん
2006/07/14(金) 13:01:10やっぱりポインタのことわかってなかったんだ。
0103デフォルトの名無しさん
2006/07/14(金) 13:01:22実装上、多くの場合はそのインスタンスの存在するアドレスが格納されている。
従って、ポインタのポインタは単に対象となるインスタンスがポインタであると言うだけのポインタである。
0104デフォルトの名無しさん
2006/07/14(金) 13:03:05インスタンスって何?
0105デフォルトの名無しさん
2006/07/14(金) 13:03:51で、「ppはポインタのアドレスを指すポインタ」のどこが間違ってると?
0106103
2006/07/14(金) 13:07:16実装に踏み入る必要はない。ポインタにアドレスが格納されている必然性がないのだから。
敢えて踏み入るなら、はじめからポインタと言わなければいい。
0107デフォルトの名無しさん
2006/07/14(金) 13:09:10段々苦しくなってきましたねぇ。
C/C++の話ですよ?
0108デフォルトの名無しさん
2006/07/14(金) 13:09:54>>61
0109デフォルトの名無しさん
2006/07/14(金) 13:10:42>>105
>>64
0110デフォルトの名無しさん
2006/07/14(金) 13:11:570111103
2006/07/14(金) 13:13:10それがなにか?
例えばMS-DOSのラージデータモデルでは一般のポインタで想像されるような、
連続したメモリ空間を指さないセグメント:アドレスモデルでしたが。
また、ある実装では全てのポインタがハンドルなので、その中身はインスタンスのアドレスじゃありませんが。
寧ろ私は>107が何故アドレスと言いたいのか知りたく思いますね。
0112デフォルトの名無しさん
2006/07/14(金) 13:14:01嘘こくなよ
>>54
>ポインタのポインタって
>ポインタのアドレスのことですよね?
0113デフォルトの名無しさん
2006/07/14(金) 13:15:33さぁ?何故でしょうね。Cには'&'があるからでしょうか。
0114デフォルトの名無しさん
2006/07/14(金) 13:16:32で、「ppはポインタのアドレスを指すポインタ」のどこが間違ってると?
0115デフォルトの名無しさん
2006/07/14(金) 13:18:13>>99
0116デフォルトの名無しさん
2006/07/14(金) 13:19:46じゃ、ポインタって何?説明して
0117デフォルトの名無しさん
2006/07/14(金) 13:21:47>>103
0118デフォルトの名無しさん
2006/07/14(金) 13:22:000119デフォルトの名無しさん
2006/07/14(金) 13:23:34「ポインタ アドレス」でググると数多くのページがHitしますが、
それに関してはどう思いますか?
0120デフォルトの名無しさん
2006/07/14(金) 13:23:57何が「じゃ」なのか全く分からんが
Wikipediaでも見とけアホ
ttp://ja.wikipedia.org/w/index.php?title=%E3%81%8A%E3%81%A3%E3%81%B1%E3%81%84&redirect=no
0121デフォルトの名無しさん
2006/07/14(金) 13:24:56間抜け
0122デフォルトの名無しさん
2006/07/14(金) 13:29:22いや、それでもアドレスでしょ。
アドレスじゃないと言い張る?
0123デフォルトの名無しさん
2006/07/14(金) 13:30:40簡単なtemplateのclassを作ったソースを書いたのですが
(operator,destractor,copyconstractorの実装は、はぶいてます)
ソース↓
#include <iostream> #include <string> namespace Mine{ template <typename T1, typename T2> class Testclass{
private:
T1 Data_like_T1;T2 Data_like_T2;
public:
Testclass():Data_like_T1(T1()),Data_like_T2(T2()){} Testclass(T1 inidata1, T2 inidata2)
{ Data_like_T1 = inidata1; Data_like_T2 = inidata2; } void CoutPvateMember()
{ std::cout << Data_like_T1 << ' ' << Data_like_T2 << '\n'; } }; } int main()
{ using namespace std; using namespace Mine;
Testclass<int, double> Tobj1; Tobj1.CoutPvateMember(); Testclass<int, double> Tobj2(5, 1.5);
Tobj2.CoutPvateMember(); Testclass<int, string> Tobj3; Tobj3.CoutPvateMember();
Testclass<int, string> Tobj4(1, "abc"); Tobj4.CoutPvateMember(); return 0; }
上記のソースでのdefault_costractorでのTestclass():Data_like_T1(T1()),Data_like_T2(T2()){}
の部分で、[Data_like_T1(T1()),Data_like_T2(T2())]の(T1())T2(T2())の部分で
T1がintならint()という形になりますしstringならstring()となりますが
このT1()のような書き方は、いったい、どんな書籍、もしくわサイトで解説してるんでしょうか
たまたま買った、C++効率的最速学習という本で、この使い方が載っていたんですが
この本には、例えばint()のような書き方をサンプルソースで使われてるんですが
この書き方の詳細は載ってませんでした。int型クラスがあるとも思えないし、EffectiveC++だと
constractorでint型のmemberがあったなら、明示的に(0)を渡しているようですし
この書き方の詳細については、いったい何の参考文献を見ればいいのでしょうか
稚拙な質問かもしれませんが、どなたか教えていただきたいです。
0124デフォルトの名無しさん
2006/07/14(金) 13:33:40>>122
横槍だけど、ポインタの中身は「実体を参照できるもの」かつ「intに変換できるもの」ならば何でもいい。
事実、アドレスではない、ただのIDを参照としてポインタに格納している処理系もある。
(そういう環境があるからこそ、規格でアドレスだと限定していないわけだが)
一般的なPC環境ではアドレスが格納されるのが普通だけどな。
0125デフォルトの名無しさん
2006/07/14(金) 13:35:52処理系ごとの実装はともかく、アドレス演算子の結果を保存するのが
ポインタ変数でしょ?
この処理系は、実際はメモリ上のアドレスじゃないから、というのは
それこそ実装に踏み込んでるよ。
0126デフォルトの名無しさん
2006/07/14(金) 13:38:53アドレス演算子の結果はアドレスじゃないと言いたいんだよ。
0127デフォルトの名無しさん
2006/07/14(金) 13:40:03「ちょwwその2人横の方がすごくね?!」←ボインだのボインだ
0128デフォルトの名無しさん
2006/07/14(金) 13:40:07ハァ、そうですか。
0129デフォルトの名無しさん
2006/07/14(金) 13:41:07また初心者スレでデマを。
intに変換できるものってなんだよ一体。
おまえの脳は20年前で止まってるだろ。
0130デフォルトの名無しさん
2006/07/14(金) 13:43:360131デフォルトの名無しさん
2006/07/14(金) 13:48:04ポインタは、それが指し示す変数へのアドレスであり、
ポインタのポインタは、それが指し示すポインタへのアドレスじゃないのか?
俺は今までそう理解してきたが。
0132デフォルトの名無しさん
2006/07/14(金) 13:48:47これのことだろ
6.3.2.3
任意のポインタ型は整数型に型変換できる。
0133デフォルトの名無しさん
2006/07/14(金) 13:49:32「アドレス」という言葉は使っちゃいけないらしいです
0134デフォルトの名無しさん
2006/07/14(金) 13:54:30俺、規格に全然詳しくないけど、それってLP64が規格に反してるってことか?
0135デフォルトの名無しさん
2006/07/14(金) 13:55:39int型と整数型というのは違うよ。
charもlongも整数型だ。
そして、intとポインタのサイズが違う処理系はいくらでもある。
0136デフォルトの名無しさん
2006/07/14(金) 13:58:02結果は処理系定義で、サイズをオーバーしても知らんってことになってるから
変換をエラーにしなければ規格には適合してることになるね
0138134
2006/07/14(金) 14:05:470139デフォルトの名無しさん
2006/07/14(金) 14:07:030140デフォルトの名無しさん
2006/07/14(金) 14:10:18「ポインタと相互変換できる整数型」というのを
最近の処理系(&C99)は用意している。
0141デフォルトの名無しさん
2006/07/14(金) 14:57:35俺漏れも。
というか>>99と>>103,>>106で言ってる事ちがくね?
>99ではポインタのアドレスを指すポインタという表現そのものが間違いであると言ってるけど
>103>106では、特定の実装上ではポインタはアドレスを指すこともあるって…。
0142デフォルトの名無しさん
2006/07/14(金) 15:38:17本人乙
0143デフォルトの名無しさん
2006/07/14(金) 15:54:19正しい知識のある奴が結局一人もいなかったからなw
0144デフォルトの名無しさん
2006/07/14(金) 16:54:32別人なんでしょ
0145デフォルトの名無しさん
2006/07/14(金) 16:56:52C++の入門レベル本になら大抵書いてあるはずだと思うが、それはそこでだけ有効な一時オブジェクトを作る式。
括弧の中はコンストラクタ引数を書く。(intなど)組み込み型の場合、型変換(キャスト)として扱われる。
引数がない場合は当然デフォルトコンストラクタが呼ばれる。組み込み型の場合、0初期化される。
ちなみにその例では単にData_like_T1(), Data_like_T2()と書いてよいはず。
0146デフォルトの名無しさん
2006/07/14(金) 17:44:530147デフォルトの名無しさん
2006/07/14(金) 17:48:130148デフォルトの名無しさん
2006/07/14(金) 19:33:22という型の関数にstaticでないメンバ関数へのポインタをそのインスタンスといっしょに
渡すにはどうしたらいいのでしょうか。教えてください。
callfuncでエラーが出ちゃうサンプル
#include <iostream>
using namespace std;
void call(void(*func)(int,int,int)){
func(1,2,3);
}
void func1(int a,int b,int c){
cout << "func1(" << a << "," << b << "," << c << ")" << endl;
}
class A{
public:
void func2(int a,int b,int c){
cout << "func2(" << a << "," << b << "," << c << ")" << endl;
}
void callfunc(){
typedef void(A::*Afunction)(int,int,int);
Afunction af=&A::func2;
call(&(this->*af));
}
};
int main(){
call(&func1);
A a;
a.callfunc();
}
0149デフォルトの名無しさん
2006/07/14(金) 19:42:13using namespace std;
class A;
void call(A* a, void (A::*func)(int, int, int));
class A{
public:
void func2(int a,int b,int c) {
cout << "func2(" << a << "," << b << "," << c << ")" << endl;
}
void callfunc() {
typedef void(A::*Afunction)(int, int, int);
Afunction af = &A::func2;
call(this, af);
}
};
void call(A* a, void (A::*func2)(int, int, int))
{
a->func2(1,2,3);
}
void func1(int a,int b,int c)
{
cout << "func1(" << a << "," << b << "," << c << ")" << endl;
}
int main(){
// call(func1);
A a;
a.callfunc();
}
0150デフォルトの名無しさん
2006/07/14(金) 19:49:27回答ありがとうございます。
callは、Cで書かれた別のライブラリの関数で、書き換えることができないんです。
0151デフォルトの名無しさん
2006/07/14(金) 20:24:15じゃ、諦めな。メンバ関数へのポインタは、通常の関数へのポインタとは
全然違うから。
0152デフォルトの名無しさん
2006/07/14(金) 20:24:45マルチスレッドを考慮しなくてよければグローバル変数を使え。考慮する必要があるならTLSを使え。
テンプレートを使えばもっと汎用的にできる。
class Hoge {
public:
void func(int, int, int);
};
namespace {
void* ptr;
void (Hoge::*mem_ptr)(int, int, int);
void callEntry(int a, int b, int c) {
(ptr->*mem_ptr)(a, b, c);
}
void call(Hoge& hoge, void (Hoge::*fn)(int, int, int)) {
ptr = hoge;
}
int main(){
Hoge hoge;
call(hoge, &Hoge::func);
}
或いはメンバ関数を呼び出すための「サンク」を作る方法もある。
0153デフォルトの名無しさん
2006/07/14(金) 20:25:37void call(Hoge& hoge, void (Hoge::*fn)(int, int, int)) {
ptr = hoge;
call(callEntry);
}
0154123
2006/07/14(金) 20:33:49それがですね・・・・
俺が買った入門書が、やっぱ駄目駄目なようで
ついでにSTLについての本も買ったんですが・・・・・
2つともハーバート・シルト著で[独習C++]と[STL標準講座]でっす!!
ただ、疑問に思うのは、独習C++もSTL標準講座も、本当に原著
通りのサンプルソースを載せてるのか?とも思う点です。
特に[STL標準講座]は、サンプルソースに間違いがあったり
<algorithm>のlower_bound()の解説が「一致する最初の要素を返す」
となってるけど、実際のreturn value は "greater than or equal"
だと、googleで検索してようやくわかったぐらいで、あとremove()とかも・・・
ま、結局思うのは、翻訳と監修してる人は、本当にちゃんと翻訳監修をしては
いないんだろうと、「わかんねーから省いちゃえ」ってな感じで翻訳監修作業を
してるんだろうと思うところです。
(しっかし、[STL標準講座]のソースは、一貫性がなさすぎて訳がわからん
あっちのソースではstd::cout文の後に"\n"つかって、こっちのソースではendl使って
キャストはc言語タイプのキャストしてるし、そりゃc言語タイプのキャストでも良いけど
こっちはc++勉強してんだからstatic_cast<>()使うのが筋ってなもんだろって思ったり・・・
入門書の内容を疑いながら読まなきゃならない入門書って、いったいなんなんだよ)
以上、独り言の愚痴でした
0155デフォルトの名無しさん
2006/07/14(金) 21:50:05さらに突っ込んだ内容は、もっと分厚い本を読んだけど。
あとなんか、図書館で買ったiostreamの本も役に立ったな。一冊丸ごとiostreamの本。
0156148
2006/07/14(金) 21:52:04インスタンスとメンバ関数で、staticなメンバ関数を作れるかとおもったら、そうもいかないみたいですね。
マルチスレッドは考慮しなくていいので、callの宣言がかわらないように、>>152さんの方法を書き換えて
使うことにします。ありがとうございました。
class A{
private:
static A *p;
static void (A::*p2)(int,int,int);
public:
void func2(int a,int b,int c){
cout << "func2(" << a << "," << b << "," << c << ")" << endl;
}
void callfunc(){
A::p=this;
A::p2=&A::func2;
call(&callfunc2);
}
static void callfunc2(int a,int b,int c){
(p->*p2)(a,b,c);
}
};
A *A::p;
void (A::*A::p2)(int,int,int);
0157デフォルトの名無しさん
2006/07/14(金) 21:58:160158デフォルトの名無しさん
2006/07/14(金) 22:12:05( ゚д゚)ポカーン
0159デフォルトの名無しさん
2006/07/14(金) 22:13:530160デフォルトの名無しさん
2006/07/14(金) 22:15:56>>150
callはそのままにせざるを得ないようだが。
0161デフォルトの名無しさん
2006/07/14(金) 22:37:03>渡すにはどうしたらいいのでしょうか。教えてください。
>callは、Cで書かれた別のライブラリの関数で、書き換えることができないんです。
CのライブラリにC++クラスのインスタンスを渡すのか?
無茶言うね。
というか
>void call(void(*)(int,int,int))
この関数の宣言を買えずに、どうやってインスタンスが渡せるんだ?
0162デフォルトの名無しさん
2006/07/14(金) 22:50:51C++の基本からやり直すべきじゃないかい?
0163148
2006/07/15(土) 01:06:55void glutMouseFunc(void (*func)(int button, int state, int x, int y));
みたいな形でコールバック関数を登録するようになっていて、そこにstaticでない
自作のメンバ関数を登録したかったのです。Cでオブジェクトの概念を使っている
gtkみたいに、インスタンスとメンバ関数ポインタをくっつけて、普通の関数ポインタとして、
渡したかったわけなのですが、綺麗に書く方法がないということは、
やはりちょっと無茶だったのかもしれません。
0164デフォルトの名無しさん
2006/07/15(土) 03:29:35K&R の原著と、その訳書の 石田晴久 の本との違いもそんな感じだよ
0165デフォルトの名無しさん
2006/07/15(土) 04:14:31GTKってこんな機能あったっけ?
GTKだって、シグナルコネクト関数でコールバック登録するときは、第一パラメータがwidgetのポインタだったと思うが。
インスタンスとコールバック関数をくっつけるのではなく、インスタンス(へのポインタ)とコールバックを、別々の引数と
して渡して、関連付けを行うんだと思ったが。
0166デフォルトの名無しさん
2006/07/15(土) 08:49:430167デフォルトの名無しさん
2006/07/15(土) 16:19:07test t=new test[4]; とかやるとコンストラクタがないというエラーになってしまいます。。
0168デフォルトの名無しさん
2006/07/15(土) 16:26:29のまちがいです
0169デフォルトの名無しさん
2006/07/15(土) 16:33:080170デフォルトの名無しさん
2006/07/15(土) 16:44:46いまのところできない。
169のようにポインタの配列を持つようにするか、std::vectorか何かを使うしかない。
0171デフォルトの名無しさん
2006/07/15(土) 16:45:19それだと delete[] が使えないね。まあ仕方ないだろうが
0172デフォルトの名無しさん
2006/07/15(土) 17:05:19std::uninitialized_fill( &p[0], &p[4], test("hoge") ) ;
0173デフォルトの名無しさん
2006/07/15(土) 20:21:16良いアイデアはないでしょうか?
0174デフォルトの名無しさん
2006/07/15(土) 20:34:470175デフォルトの名無しさん
2006/07/15(土) 20:46:52ポインタの配列か、vectorのどっちかを使おうとおもいます!!
0176デフォルトの名無しさん
2006/07/15(土) 20:53:030177173
2006/07/15(土) 21:42:25ネットでしばらく情報探してみましたが、他言語のreadlineがひっかかるようですので、
明日にでも書店・図書館で調べてみます。
ありがとうございました。
0178デフォルトの名無しさん
2006/07/15(土) 21:56:53開発環境は?
0179173
2006/07/15(土) 22:08:06これで答えになってますでしょうか?
0180デフォルトの名無しさん
2006/07/15(土) 23:30:06{
p = malloc(sizeof(int) * 10);
}
void kaihou(int *p)
0181180
2006/07/15(土) 23:31:290182デフォルトの名無しさん
2006/07/15(土) 23:34:24じゃここから落とせる。
ttp://jarp.does.notwork.org/win32/
凝ったことするんじゃなければ、readline.hをインクルードして
char *p;
p = readline("> ");
とかするだけでいい。
srcパッケージのほうにはmanファイルが入ってるかも(未確認)。
0183デフォルトの名無しさん
2006/07/16(日) 10:11:05class C_MAX_##TYPE \
この##って何?連結?
0184デフォルトの名無しさん
2006/07/16(日) 10:42:50プリプロセッサだけ走らせればわかるよ
あとは#で引数の文字列評価とか
0186デフォルトの名無しさん
2006/07/16(日) 11:31:580187173
2006/07/16(日) 13:20:17さっそくreadline-4.3-2-mingw32.zipの中身をコピーして試してみたのですが、
C:\(パス)\Temp/ccaYbaaa.o(.text+0x57c):command_test.c: undefined reference to `_imp__readline'
collect2: ld returned 1 exit status
という警告が出てしまいます。
おそらくどこかでreadlineの追加分の定義が必要なのかなとは思うのですが。。。
0188デフォルトの名無しさん
2006/07/16(日) 13:25:150189173
2006/07/16(日) 13:57:40gcc -lreadlineを試してみると、
/mingw/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
とメッセージ内容は変わりましたが、やっぱり警告が出てしまいます。
0190デフォルトの名無しさん
2006/07/16(日) 14:03:39どんなコードをコンパイルしようとしてるの?
ちなみにhistoryも使える最小限のコードは以下。-lreadline付けてコンパイルしてみて。
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
int main()
{
char *p;
using_history();
while (1) {
p = readline("$ ");
add_history(p);
}
return 0;
}
0191173
2006/07/16(日) 14:20:02C:\(パス)\Temp/cckPaaaa.o(.text+0x39):test.c: undefined reference to `_imp__readline'
C:\(パス)\Temp/cckPaaaa.o(.text+0x49):test.c: undefined reference to `_imp__add_history'
collect2: ld returned 1 exit status
の警告が出ました。
ちなみにCの入門書を2冊やり終えたくらいのレベルです。
で、UNIXのコマンドラインのようなものを作ってみようとチャレンジ中だったのですが、
TAB補完と入力間違いしたときのBSで消すことを両方させるところで壁に当たってしまいました。
とりあえずTAB補完だけ・BSだけならgetcheやfgets,getcharあたりでできたのですが。
このレベルじゃまだしんどそうなら、さらに勉強してからチャレンジしてみます。
0192デフォルトの名無しさん
2006/07/16(日) 14:21:210193デフォルトの名無しさん
2006/07/16(日) 14:22:58readlineのlib*を他のライブラリが入ってるディレクトリにコピーしてみて。
0194デフォルトの名無しさん
2006/07/16(日) 14:23:14で、ライブラリがないと結局たいしたことはできないと。
0195デフォルトの名無しさん
2006/07/16(日) 14:29:13インストールできるんだけどね。
readlineもsrc packageならそうなってるかもしれん。
0196173
2006/07/16(日) 14:48:37bin,doc,include,libをそれぞれMinGW内の同じところへコピーしてみた
(し直してみた)けどダメでした。
さっきと同じエラー(でいいですよね?192さん)が出てしまいます。
これができたら、次はオライリーのC実践プログラミングで勉強しようと
思ってたのですが(評判よさそうなので)、ライブラリの勉強とでしたら
どちらが先の方がいいでしょうか?
0197デフォルトの名無しさん
2006/07/16(日) 14:55:13俺回線が細くて、今すぐMinGWインストールできないから、これ以上の
アドバイスは出来ん。
今すぐreadlineを使ったアプリを作りたいってわけじゃなさそうだから、
勉強のほうを進めれば?
0198デフォルトの名無しさん
2006/07/16(日) 14:55:550199173
2006/07/16(日) 15:01:44Cygwinは今いれると目標への熱意が冷めてしまいそうなので、今回の件を
ちゃんと理解できるようになってから試してみることにします。
たくさんのアドバイスありがとうございました。
0200デフォルトの名無しさん
2006/07/16(日) 17:33:51ディレクトリ構成
解凍パス/bin
解凍パス/doc
解凍パス/include
解凍パス/lib
解凍パス/test.c (>190さんのサンプル)
解凍パス/readline.dll (binから移動)
コンパイル
gcc -Iinclude -Llib test.c -lreadline
結果
問題無し。-lreadline をつける場所を間違えたんじゃね?
0201デフォルトの名無しさん
2006/07/16(日) 18:37:38typedef struct {
unsigned short file_type;
unsigned int file_size;
unsigned short reserved1;
unsigned short reserved2;
unsigned int offset;
}BmpFileHeader;
という、サイズが14バイトのつもりのヘッダ構造体を作ったのですが、
sizeof (BmpFileHeader);
としてやると16という値が出てしまいます。
何かプログラム間違ってるでしょうか?
0202デフォルトの名無しさん
2006/07/16(日) 18:39:050203デフォルトの名無しさん
2006/07/16(日) 18:43:33のコードの一部の引用です
#define OP_ASSERT(x) do { \
std::stringstream out_str; \
bool bTestOk = true; \
(x); \
if ( !bTestOk) std::cout << "Assertion failed: \n'" << #x << "'\n" <<
out_str.str() << std::endl; \
} while(0)
こういうマクロを見かけたんですがこのマクロはどうして
do { } while(0)
なんてことをしているのでしょうか?
単純に{ } とブロックで囲むのとはどこか違うのでしょうか?
そもそもどうしてブロックで囲んでいるのでしょうか?
0204デフォルトの名無しさん
2006/07/16(日) 18:49:00{} で囲むのは、中で使う変数のためのスコープを作るため。
do while(0) するのは、マクロ呼び出しの後のセミコロンを必須にするため。
0205デフォルトの名無しさん
2006/07/16(日) 18:56:36if (...) OP_ASSERT(...);
としたときのための深謀遠慮。
0207デフォルトの名無しさん
2006/07/16(日) 19:05:22もしWindowsならPlatform SDKのBITMAPFILEHEADERを使うべきだよ。
そうでないなら自分で定義するしかないけど。
0208203
2006/07/16(日) 19:19:47ちょっと理解するのに時間かかりそうです
>>204
変数のスコープ作成のためというのは理解できました
マクロ記述以前の部分で同名変数あったらまずいですものね
マクロ呼出し後のセミコロンを必須とするためというのも理解できました
文の最後に;がないのは気持ち悪いですものね
do {} while(0)で囲むことによって
OP_ASSERT(3)
とか;が抜かった場合ちゃんとコンパイルエラーになってくれますね
で、>>205が理解できてません
頭をひねっていますあと30分考えれば理解できるだろうか・・・やってみます
0209デフォルトの名無しさん
2006/07/16(日) 19:44:08{};
else{}
if()
do{}while(0);
else{}
上だとelseが浮いてエラーでしょ?
0211203
2006/07/16(日) 19:49:55やっと理解できました
if (...) OP_ASSERT(...);
else printf("else");
としたときにマクロをdo { } while (0) で囲ってないと
elseとifが対応しないというコンパイルエラーになるんですね
これで合ってますか?
0212203
2006/07/16(日) 20:02:24あ、先に答え書いてくれてたんですね。
ありがとうございます
ただ、どうしてdo {} while(0);だとコンパイルエラーにならないのかが
わかりません
if ()
{};
else{};
だと二行目の{};でif文の終わりと解釈されてエラー
if()
do{}while(0);
else{};
だと二行目は
if() 文;
else 文;
の形式として解釈されて問題なし
ということですかね
0213デフォルトの名無しさん
2006/07/16(日) 21:35:09virtual void Init();
};
class cData : public cBase {
void Init(){ /*初期化処理*/ };
};
main() {
static char *works=(char*)malloc(1000);
cData *data;
data=(cData*)&(works[50]);
data->Init();
}
こういった感じで別途確保した領域をクラスとして使いたいのですが、->Init()実行時にエラーが出てしまいます。
コンストラクタが実行されていない為に仮想関数のテーブルが作成されていない、と予想しているのですが、
この予想で正しいでしょうか。また、解決法はありますでしょうか。
知恵を貸してください。
0214デフォルトの名無しさん
2006/07/16(日) 21:44:43アラインメントの問題がなければ、<new>をインクルードして、
data = new(&works[50]) cData;などとする。
それで&works[50]にコンストラクタが呼ばれcDataのオブジェクトが作られる。
逆は、data->~cData();のように自分でデストラクタを呼んでからfree()すればよい。
0215デフォルトの名無しさん
2006/07/16(日) 22:04:150216デフォルトの名無しさん
2006/07/16(日) 22:11:56cData *data = new cData();
0217デフォルトの名無しさん
2006/07/16(日) 22:15:300218216
2006/07/16(日) 22:15:31+50 はアライメントの問題が発生しそうだな。
0219デフォルトの名無しさん
2006/07/16(日) 22:22:33ご教示いただけた手法で解決いたしました。
new の使い方や、ヘッダの存在自体しらなかったりと勉強不足を思い知らされました。
ありがとうございました。
data->cData();
これでコンストラクタが呼べても良いと思うんですけどねぇ・・
0220213,219
2006/07/16(日) 22:32:25+50は例としてあげるのは不味かったですね・・
実際はローカルなメモリ管理クラスが返す領域で、16byteにアラインが調整されています。
大人の事情というか、管理上の都合なんですがオーバーロードすると特定の領域からの
割り当てしか出来なくなってしまいそうなので今回は別の手段を、と考えました。
ありがとうございました。
0221デフォルトの名無しさん
2006/07/16(日) 22:37:40printf, puts, putcharやscanf, getcharの使い分けがよくわかりません。
1文字ならputchar, getcharが良いとか、
エスケープシーケンスを使うならprintf、使わないならputsが良いということでしょうか?
今まではprintfとscanfしか使っていなかったのですが、使い分けるべきでしょうか?
実行効率や、エラー時に違いがあるのでしょうか?
ご教授お願いします。
0222デフォルトの名無しさん
2006/07/16(日) 22:51:50効率は実装依存。
エラー時の違いはヘルプ読め。
0223デフォルトの名無しさん
2006/07/16(日) 22:55:10やっぱりprintfは書式文字の解釈をする分、
単純に文字列を書くだけなら余計な手間がかかることになる。
だから、どちらかというとputs/putcharで済むならそっちを使うと言う傾向にあることはある。
世の中、printfをputsやputcharに置き換えられるときには
置き換えるという最適化をする変わり者のコンパイラもあるけどね。
入力の方も事情は大体同じ。
ただしscanfはまともに使うのが恐ろしく面倒で、getsはまず間違いなく安全に使えない。
そこで、たとえばfgetsとsscanfを使う。
(getcharはOK)
0224デフォルトの名無しさん
2006/07/16(日) 23:04:32標準ライブラリ関数の最適化による挿げ替えをするのは変わり者なのですか?
それじゃ、最適化による関数のインライン展開は?
標準ライブラリ関数より高速な関数への挿げ替えは?
0225デフォルトの名無しさん
2006/07/16(日) 23:27:06変わり者で良いだろ
0226デフォルトの名無しさん
2006/07/16(日) 23:31:140227デフォルトの名無しさん
2006/07/16(日) 23:37:04よい意味で変わり者だと思う。
0228デフォルトの名無しさん
2006/07/17(月) 01:28:27#define PUTWS(wtes) (wprintf(L"%s\n", #wtes)
ってしようとすると、ポインタの型が合いませんって
コンパイラさんが怒ってます。
何かいい回避方法はないでしょうか?
0229デフォルトの名無しさん
2006/07/17(月) 01:33:110230228
2006/07/17(月) 01:41:41229さんありがとうございます。
#xxx
って、"xxx"に展開されるだけだったんですね。
勉強になりました。
0231228
2006/07/17(月) 01:56:38んで、
#define PUTWS(wtes); wprintf(L"%s\n", L ## #wtes);
としたら両方で解決しました。
んでは。
0232229
2006/07/17(月) 02:14:550233デフォルトの名無しさん
2006/07/17(月) 04:44:01iccもやるよ。MSもmemcpy()をインライン展開するくらいしたと思ったが。
0234デフォルトの名無しさん
2006/07/17(月) 12:05:04printfに渡されている文字列定数の中身までみるようなコンパイラはないだろ。
0235デフォルトの名無しさん
2006/07/17(月) 12:06:20VCもgccも文字列定数を見て型の不一致の警告を出したりしたと思ったが
0236デフォルトの名無しさん
2006/07/17(月) 12:18:22VC8だと出すんだな。
printfのようなものなんて久しく使ってないから気づかなかった。
0237デフォルトの名無しさん
2006/07/17(月) 12:18:52printf("%s\n", foo);をputs(foo);に置き換えるくらいは平気でやる。
printf("%c", '\n');がputchar('\n');に置き換えるくらいもやったと思った。
0238デフォルトの名無しさん
2006/07/17(月) 16:12:36int main(){
FILE *fp;
fp=fopen("test.txt","a+");
return 0;
}
このプログラムを実行してもtest.txtというファイルが作成されません。
何か勘違いがあるのでしょうか?
0239デフォルトの名無しさん
2006/07/17(月) 16:17:20戻り値調べて、ヌルが返ってきてたら perror() してみろ。
0240デフォルトの名無しさん
2006/07/17(月) 16:25:230242デフォルトの名無しさん
2006/07/17(月) 16:33:40理由はよくわかりませんがアドバイスをくださった皆さん、どうもありがとうございました。
0243デフォルトの名無しさん
2006/07/17(月) 16:37:35質問に便乗する形になってすまんが、誰か詳しく教えてくれんか?
0244デフォルトの名無しさん
2006/07/17(月) 16:41:24>>241
環境も何もわからんのにわかるかボケ。
0245デフォルトの名無しさん
2006/07/17(月) 16:58:01カレンディレクトリについて勉強して出直してこい。
0246笹井奈琴
2006/07/17(月) 18:44:36ttp://puchi15.hp.infoseek.co.jp/karen/karen3.html
こうですか?!わかりません!
0247デフォルトの名無しさん
2006/07/17(月) 19:39:430248デフォルトの名無しさん
2006/07/17(月) 21:34:33戻り値の型はintよりBOOLの方が真偽であると分かりいいと思うが、
<windows.h>をBOOL以外に使う必要が無い場合、
インクルードしたくない。boolはc++でしか使えない。
他にいい方法がありましたら教えてください。
0249デフォルトの名無しさん
2006/07/17(月) 21:40:370250デフォルトの名無しさん
2006/07/17(月) 21:44:49C99の<stdint.h>
0251デフォルトの名無しさん
2006/07/17(月) 21:45:07ある関数と、その関数から呼ばれた関数と、さらにその呼ばれた関数から呼ばれた関数と・・・
という関数群でのみ通用する、ローカル変数とグローバル変数の中間の変数みたいなものってありませんか?
何も考えずにグローバルに詰め込んでたら何がなんだかわからなくなってしまって・・・
0252デフォルトの名無しさん
2006/07/17(月) 21:47:290253デフォルトの名無しさん
2006/07/17(月) 21:57:30そういう変数をまとめた構造体へのポインタを引数にしろ。
それが C++ でのクラスに相当するコードになる。
0254デフォルトの名無しさん
2006/07/17(月) 21:58:020255248
2006/07/17(月) 22:01:40使ってみます。
0256デフォルトの名無しさん
2006/07/17(月) 23:19:110257デフォルトの名無しさん
2006/07/17(月) 23:57:58「セグメンテーション違反です」と怒られます。環境は Linux です。
#include <stdio.h>
int main(void)
{
double aa[100000][11] = {0.0};
return 0;
}
0258デフォルトの名無しさん
2006/07/18(火) 00:00:400259デフォルトの名無しさん
2006/07/18(火) 00:08:43よくわかってませんが、スタックサイズを大きくする方は ulimit でよいですか?
0260257
2006/07/18(火) 00:18:35ulimit -Ss 大きな値
で上手くいくようです。257 だと大きな値 = 8600 がギリギリ可能な値でした。
なんで 8600 になるのかわからないですが…
0261デフォルトの名無しさん
2006/07/18(火) 00:37:16static double aa[100000][11] = {0.0};
とする手もある
ただし257は再現する最低限のコードってことだろうから
文脈によってはこの手は使えない
0262デフォルトの名無しさん
2006/07/18(火) 11:54:39double aa[100000][11] ってことは
doubleが8byteなら8,800,000byteをスタックに要求しているのでしょう?
Linuxは使ったことないし、ulimitのことも知らないけれど、
スタックサイズに8600を指定して上手く行くと言うのは
(8600 * 1024) == 8,806,400byteを確保しているからだと思いますよ。
0263デフォルトの名無しさん
2006/07/18(火) 15:22:01マジ課題がピンチなんだ。
0264デフォルトの名無しさん
2006/07/18(火) 15:22:54配列は使わないんだよな?
0265デフォルトの名無しさん
2006/07/18(火) 15:36:460266デフォルトの名無しさん
2006/07/18(火) 15:42:22をソートしたいとか。
0267デフォルトの名無しさん
2006/07/18(火) 15:43:28そんだけで分かるかカスが
0268デフォルトの名無しさん
2006/07/18(火) 15:49:53template 記述の再帰型 qsort モドキになるのか?
0269デフォルトの名無しさん
2006/07/18(火) 15:51:10配列に代入し直してからソートして戻すか、
ポインタの配列を作ってからソートするか、か?
あるいは、泥臭く分岐するか?
どれにしろ、その程度の個数ならクイックソートは
かなり無駄っぽいが。
0270デフォルトの名無しさん
2006/07/18(火) 15:54:58配列は使わないんだよ。
0271デフォルトの名無しさん
2006/07/18(火) 15:56:255個かどうかも分からないのに
0272デフォルトの名無しさん
2006/07/18(火) 15:59:24いや、初心者ならありうるか。
0273デフォルトの名無しさん
2006/07/18(火) 15:59:24C++ の参照渡しもNGなんだろうねぇ…
多少工夫するにしても マクロでやれ っつーことか?
# >>269 の素で分岐するのが最終解だと思うけどね
0274デフォルトの名無しさん
2006/07/18(火) 16:36:030275デフォルトの名無しさん
2006/07/18(火) 16:40:19コンパイル済みのアプリを
他のプログラムから(出来ればVB)操作することは出来るんでしょうか。
ボタンにフォーカスを持っていって押す、とか。
0276デフォルトの名無しさん
2006/07/18(火) 16:43:02A. 技術的に出来るがお前には無理
0277デフォルトの名無しさん
2006/07/18(火) 18:44:180278デフォルトの名無しさん
2006/07/18(火) 18:52:21たぶん227が考えているものとはだいぶ違うような気がする。
STLはジェネリックなコンテナ(コレクション)と、その要素を舐めるためのイテレータと、
それに対して操作を施すアルゴリズム(関数)のあつまり。
0279デフォルトの名無しさん
2006/07/18(火) 18:58:45C++のSTLはJavaにすごく似てると思うんです。
コレクションもイテレータもあるし。
0280デフォルトの名無しさん
2006/07/18(火) 19:06:34言語処理系 と コンテナ概念(およびその実装) を等価に評価するなんてナンセンスだぜ
0281デフォルトの名無しさん
2006/07/18(火) 19:09:02その言い方だと、四則演算なんかもっとそっくりだぞ。
例えばFortranとBasicともそっくりだ。
0282デフォルトの名無しさん
2006/07/18(火) 19:10:34それはともかく、どんなプログラミング言語でも結局そういうコレクションにはお世話になるんだし、
その実装も大したことはないから結局どんな言語でも似たようなものになるのは当然だと思う。
0283デフォルトの名無しさん
2006/07/18(火) 19:23:53STLだとなんかビジネスロジックみたく(VBやACESSのスクリプト)みたいに
システムを楽に量産するような感じなんでしょうか。
日本語変ですいません。
0284デフォルトの名無しさん
2006/07/18(火) 21:23:33うまく生かしてやるように使うのが大事。
0285デフォルトの名無しさん
2006/07/18(火) 23:01:260286デフォルトの名無しさん
2006/07/19(水) 02:15:05とか言いかねないな。
0287デフォルトの名無しさん
2006/07/19(水) 02:21:000288デフォルトの名無しさん
2006/07/20(木) 02:00:50{
char *str;
sprintf(str, "%s%s", str1, str2);
return str;
}
str1とstr2を連結した文字列strのポインタを返す関数を作りました。
このコードでもうまく動くのですが、strは初期化されていないのに
なぜ、正常に動くのでしょうか?
0289デフォルトの名無しさん
2006/07/20(木) 02:04:170290デフォルトの名無しさん
2006/07/20(木) 02:10:43そうなんですか?
正しくは
char* concatenate(char* str1, char* str2)
{
char *str;
str = (char*)malloc(strlen(str1) + strlen(str2) - 1);
sprintf(str, "%s%s", str1, str2);
return str;
}
こうするべきですか?
0291デフォルトの名無しさん
2006/07/20(木) 02:11:570292デフォルトの名無しさん
2006/07/20(木) 02:25:390293デフォルトの名無しさん
2006/07/20(木) 14:27:03それより、freeしなくていいの?
0294デフォルトの名無しさん
2006/07/20(木) 14:28:20+1じゃないといけんね。
0295デフォルトの名無しさん
2006/07/20(木) 15:16:49本人ですか?
関数内でfreeしちゃったらそもそも・・・
本家の strcat は呼び出し側の方で malloc して
strcat(dst, src1, src2) してるね
0296デフォルトの名無しさん
2006/07/20(木) 15:23:460297デフォルトの名無しさん
2006/07/20(木) 15:34:25今日からCをはじめよめた者です
猫でもわかる〜と言う本を買ってそれで学ぼうと思ったのですが・・・。
いきなり大きな障害が C++Builder 5を使おうと思っているのですか
うまく動いてくれないんです メモ帳で
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
これを.cで保存してコマンドプロントで実行したら
HelloWorld
と出るはずなのですが
Borlanb C++ 5.5.1 for win32 Copyright (c) 1933,2000 Borland
HelloWorld.c;
Turbo Incremental Link 5.00 Copyright (c) 1997,2000 Borland
C:\work>
と出るのです
これは何が悪いのでしょうか? 助言よろしくお願いします
0298デフォルトの名無しさん
2006/07/20(木) 16:11:59ソースの名前が hello.c としたら hello.exe というファイルが出来てない?
それを実行すると Hello World とでる。
0299デフォルトの名無しさん
2006/07/20(木) 16:14:33そりゃ単にソースコードをコンパイルして実行ファイルを作っただけだ。
実行したいなら、C:\work内にHelloWorld.exeが生成されてるだろうからそれをそのまま(コマンドプロンプトから)実行。
あと、メッセージはちゃんとコピー&ペーストしようね(プロンプトからならドラッグして範囲選択後、左クリック)
0300デフォルトの名無しさん
2006/07/20(木) 16:53:370301デフォルトの名無しさん
2006/07/20(木) 17:02:590302デフォルトの名無しさん
2006/07/20(木) 17:05:53Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
HelloWorld.exe:
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x2)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x4)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0xf)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0xff)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0xff)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 'ク' (0xb8)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2206 HelloWorld.exe 1: 不正な文字 '@' (0x40)
エラー E2206 HelloWorld.exe 1: 不正な文字 '' (0x0)
エラー E2141 HelloWorld.exe 1: 宣言の構文エラー
*** 24 errors in Compile ***
0303デフォルトの名無しさん
2006/07/20(木) 17:07:130304デフォルトの名無しさん
2006/07/20(木) 17:08:430305デフォルトの名無しさん
2006/07/20(木) 17:10:49出来ました
アレがコピペできるなんて思いませんでした
やってみると出来ました
色々情報サンクスです
何かあったらまたきますのでそのときよろしくお願いします
0306299
2006/07/20(木) 17:19:470307デフォルトの名無しさん
2006/07/20(木) 17:23:08上級者宣言する奴には、もっとろくな奴がいない。
0308デフォルトの名無しさん
2006/07/20(木) 17:33:470309デフォルトの名無しさん
2006/07/20(木) 17:48:17大笑いwwwww
0310デフォルトの名無しさん
2006/07/20(木) 18:19:22漏れはうっかり右クリックを2回(コピーしてペーストも)してしまうことがあるので
コピーのときは「範囲選択+Enter」でペーストのときだけ右クリックするようにしてる
0311デフォルトの名無しさん
2006/07/20(木) 19:06:390312290
2006/07/21(金) 02:32:58本人です。
どうもありがとうございました。
これからもよろしくお願いします。
0313デフォルトの名無しさん
2006/07/21(金) 06:51:15Borland C++ compiler 5.5を使っています。
本の中で次のような練習問題があるのですが、
#include <stdio.h>
int main()
{
int a = 10;
size_t s;
s = sizeof ++a;
printf("a = %d\n", a);
return 0;
}
これをコンパイルしようとすると、
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
0409.c:警告 W8004 0409.c 14: 's' に代入した値は使われていない(関数 main )
と警告が出てコンパイル出来ません。
この本には上記のようなサンプルコードと、それをコンパイルした
実行ファイルが付いていて、ファイルを実行する事は出来ます。実行すると、
a = 10 となります。なぜ上記のコードがコンパイル出来るのでしょうか?
他にも本と同じように組んでもコンパイル出来ない事が何度かありました。
これは私の環境が良くないのでしょうか?助言宜しくお願いします。
0314デフォルトの名無しさん
2006/07/21(金) 06:53:500315デフォルトの名無しさん
2006/07/21(金) 07:24:00これは何を意図しているんだ?
0316デフォルトの名無しさん
2006/07/21(金) 07:29:42フォルダの中を確認したら実行ファイルがありました。
警告文とエラーメッセージが出たらコンパイル出来ていないと
思い込んでいました。カスです。ごめんなさい。
0317デフォルトの名無しさん
2006/07/21(金) 07:35:33は変数 a がインクリメントで11になるはず!
しかし、sizeof 式;としても式は評価されないから
変数 a の値は10のまま。という練習問題みたいです。
0318デフォルトの名無しさん
2006/07/21(金) 07:37:25sizeof 式
sizeofで式が評価されないことの実証だと思う。評価されるとすると a = 11になるよな。
0319デフォルトの名無しさん
2006/07/21(金) 07:40:080320デフォルトの名無しさん
2006/07/21(金) 07:45:44他の問題も全て出来ました。御助力ありがとうございました。
0321デフォルトの名無しさん
2006/07/21(金) 08:55:14どのサンプルをみてもInternetReadFileを数回読み込むだけで全部取得できているのですが、どこが悪いのかわかりません。
0322デフォルトの名無しさん
2006/07/21(金) 09:49:410323デフォルトの名無しさん
2006/07/21(金) 22:36:300324デフォルトの名無しさん
2006/07/22(土) 16:41:20C++はnewで初期化とかしなくていいんですか?
0325デフォルトの名無しさん
2006/07/22(土) 16:48:03必要なところではしましょ。
0326デフォルトの名無しさん
2006/07/22(土) 17:33:30C++はC#と違ってコンストラクタが勝手に呼ばれるということでいいんでしょうか?
0327デフォルトの名無しさん
2006/07/22(土) 19:06:04int x = 5;のようなことはC++でもC#でも書けるでしょ。
その考えをクラスにも拡張したと捉えてみてはどうでしょう。
0328デフォルトの名無しさん
2006/07/22(土) 19:08:30大体こんな感じっていうのはわかりました。
ありがとうございました。
0329デフォルトの名無しさん
2006/07/22(土) 19:19:27C#って構造体でもコンストラクタ呼ぶにはnew使うのか、説明には面倒な仕組みだ。
0330デフォルトの名無しさん
2006/07/22(土) 21:02:47をいじってたんですが CWMPEventDispatch.cpp の各メソッド
( OpenStateChange 〜)からWMPのコントロールを持っている
ウィンドウのハンドルを取得したいんですがどうやったらいいでしょう?
0331デフォルトの名無しさん
2006/07/23(日) 04:54:58クラスのインスタンスはどこで作るべきでしょーか?
グローバルに作るとまだゲットしてないウィンドウハンドルが受け取れないので
初期化処理ができないしWinMainとかプロシージャ内で作るのも・・・?
もしかしてとんでもない考え間違いですかねぇ・・・
0332デフォルトの名無しさん
2006/07/23(日) 04:58:05そんな情報だけじゃ何も言えない。
0333デフォルトの名無しさん
2006/07/23(日) 05:04:38クラスの詳細でしょうか?
メインウィンドウに張り付いて描画されたビットマップを表示する
カスタムコントロールのクラスです
MFCでいうCWndクラスのようなものは継承してませんし作れませんので
どうしたもんかと思いまして・・・
0334デフォルトの名無しさん
2006/07/23(日) 05:11:44グローバルなポインタを置いてウィンドウ作成時に new すればいいんじゃね?
0335デフォルトの名無しさん
2006/07/23(日) 05:20:45な、なるほど!
ウインドウ作成時とはコントロールの張り付け先のメインウィンドウ作成時
ということでよろしいでしょうか?
0336デフォルトの名無しさん
2006/07/23(日) 05:25:28他に何のウィンドウがあるか、こっちはシラネーんだ。好きにしろ。
0337デフォルトの名無しさん
2006/07/23(日) 05:30:11すみません確かにそうですね!
なにはともあれ、ありがとうございます!
0338デフォルトの名無しさん
2006/07/23(日) 15:15:28POINT ptHoge = { 640, 480 };
みたいに初期化できるんだけど、初期化したいのがクラス変数の場合は
どうすればいい?
コンストラクタ内で、ptHoge.x = 640; ptHoge.y = 480; ってやるしかない?
0339デフォルトの名無しさん
2006/07/23(日) 15:18:580340デフォルトの名無しさん
2006/07/23(日) 15:39:27単にメンバの初期化なら初期化リストを使うのがいいかも。
こんなカンジで定義しておいて、
class POINT {
private:
int x, y;
public:
POINT(int x, int y) : x(x), y(y) {}
};
こんなカンジで初期化。
POINT ptHoge(640, 480);
0341デフォルトの名無しさん
2006/07/23(日) 15:42:34いや、たぶん class T { POINT ptHoge; T(); }; の T::T() の話だろ。
0342デフォルトの名無しさん
2006/07/23(日) 16:46:530343デフォルトの名無しさん
2006/07/23(日) 17:33:09バカをさらけ出さなくてもよい
0344デフォルトの名無しさん
2006/07/23(日) 18:06:50こういうアホほど答えたがるのはどうにかならんものか
0345デフォルトの名無しさん
2006/07/23(日) 18:29:48なんか問題ある?
0346デフォルトの名無しさん
2006/07/23(日) 18:48:420347デフォルトの名無しさん
2006/07/23(日) 21:37:480348デフォルトの名無しさん
2006/07/24(月) 01:03:53int sign(int n)
{
if (n>0) return 1;
if (n<0) return -1;
return 0;
}
をifも三項演算子も使わないで実装する方法があったと思うのですが
どなたか知りませんか?
0349デフォルトの名無しさん
2006/07/24(月) 01:19:41((n > 0) - (n < 0))
こんなの?お勧めはしない。
0350デフォルトの名無しさん
2006/07/24(月) 01:36:44なぜ三項演算子を使わない?
0351デフォルトの名無しさん
2006/07/24(月) 01:43:48移植性消えるけど
0352デフォルトの名無しさん
2006/07/24(月) 02:40:50>>350 if文と同じだと聞いたもので...秒間1000万回近く呼ばれるので条件分岐を無くせば高速化できるかなと期待しているのです。
>>351 同じような事を考えたのですが0と正を算出する方法が思い付きませんで。intel以外で使う予定はないので移植性には目をつむります...
0353デフォルトの名無しさん
2006/07/24(月) 02:53:250354デフォルトの名無しさん
2006/07/24(月) 03:59:170355デフォルトの名無しさん
2006/07/24(月) 04:37:390356デフォルトの名無しさん
2006/07/24(月) 06:56:150357デフォルトの名無しさん
2006/07/24(月) 07:39:50349のほうは条件分岐がなくなって速そうに見えた。
あと、どちらもシフト命令でMSBを見てるようだ。
ちょっと意外。
0358デフォルトの名無しさん
2006/07/24(月) 07:47:160359デフォルトの名無しさん
2006/07/24(月) 14:30:35コンパイラの最適化でどうなるかなんて
どうせ考えたって埒があかないんだから。
0360デフォルトの名無しさん
2006/07/24(月) 18:32:45static int sign0(int n) {if (n > 0) return 1;if (n < 0) return -1;return 0;}
static int sign1(int n) {if (n < 0) return -1;if (n > 0) return 1;return 0;}
static int sign2(int n) {return ((n > 0) - (n < 0));}
static int sign3(int n) {return n < 0 ? -1 : n > 0;}
・gcc3.4.4@cygwin
sign1とsign3で全く同じコードを吐く。それらは条件ジャンプ1回と条件セットでシフトはなし。
sign2はシフトと条件セットを駆使している。sign0は無駄なジャンプあり。
・gcc3.2.3@linux
cygwin版とほぼ同じ。こちらの方が積極的にインライン展開しようとする。一部無駄なジャンプあり。
sign0とsign2でシフトを使う。
・icc(32)9.0@linux
sign2以外はジャンプし捲くりのほぼ同じコード。
プロファイリングでジャンプしない条件を探すことが前提か。
・icc(64)9.0@linux
sign2以外ではシフトは使わない。ジャンプはするが、32ビット版ほどではない。
sign2以外は同じロジックになり、条件ジャンプ1回無条件ジャンプ1回、条件つきコピー1回。
・総括
インライン展開しないとどっち道関数呼び出しが遅いと思われ。
インライン展開するならロジックによる速度差が出るだろうけれど、
iccの場合はジャンプの可能性をプロファイリングで正しく見積もるべきだろう。
#詳細は割愛。
0361デフォルトの名無しさん
2006/07/24(月) 22:00:04sign0とsign2しかやってないけど、
sign0の-Oなしでジャンプ2個、-O3でジャンプ1個だったけども。
うちもgcc (GCC) 3.4.4 (cygming special)
0362デフォルトの名無しさん
2006/07/24(月) 22:41:02returnを数えてないとか? インライン展開しちゃうと判断難しそうだが。
0363デフォルトの名無しさん
2006/07/24(月) 23:49:12俺も知りたい。結局、if 文で判定していたら大笑い。
0364デフォルトの名無しさん
2006/07/25(火) 11:28:08>>360 詳細な分析ありがとうございます.inlineでやってます.プロファイリングの方法が今ひとつ分かってないので今後の課題です.
>>356 >>363 実はオセロの勝敗累積?に使ってます.うまいこと書けませんが
sum = 0;
for(i=0; i<10000; i++) sum += sim();
でsimが何度か再帰するのですが最後に石の数の差から勝敗をsignで取り出して加算してゆく感じです.アルゴリズムがうまくいってないのでよわよわですが
0365デフォルトの名無しさん
2006/07/25(火) 11:30:500366デフォルトの名無しさん
2006/07/25(火) 11:48:39オセロの勝敗は石の数の差だけど
途中の有利不利は石の数の差じゃないから
よあよあになるのは当たり前
0367デフォルトの名無しさん
2006/07/25(火) 11:50:23自分の着手出来る場所の数 - 相手の着手出来る場所の数
が大きくなるようにするのがミソ
0368デフォルトの名無しさん
2006/07/25(火) 14:15:39最後にsignを使っているところは問題なさそうです.
最近囲碁で流行っている手法だそうなので試してみてますがあんまりうまくいってません...
0369デフォルトの名無しさん
2006/07/25(火) 17:03:48ttp://www.vector.co.jp/soft/win95/prog/se251850.html
上のアドレスから落とせる、
amediousという、3層ニューラルネットワークを作成するプログラムを使って
入力層2中間層4出力層3のネットワークをBPで学習させて使いたいのですが
amediousに付いてくるhtmの説明を見てもよく分かりませんでした。
結局これは、自分でこの説明を参考にしてプログラムを組め、
ということなのでしょうか・・・?
上でVC++6.0を使っています、と書きましたが、
持っているというだけで、プログラムの知識がまったくないので、困っています。
良かったら、どなたかアドバイスをお願いします・・・。
0370デフォルトの名無しさん
2006/07/25(火) 19:39:30それは、クラスライブラリだから、自分でプログラムするんだよ。
プログラムの知識がまったくないなら無理。
0371デフォルトの名無しさん
2006/07/25(火) 19:41:57class CLASS
{
private:
char m_string[1024];
public:
void method() {
strcpy( m_string, "TEST" ); // ここでNULL
}
};
どう思いますか
0372デフォルトの名無しさん
2006/07/25(火) 19:45:240373デフォルトの名無しさん
2006/07/25(火) 21:32:12CLASS *p = 0;
p->method();
ところでC++ではメソッドという言葉を使わない。
0374デフォルトの名無しさん
2006/07/25(火) 22:12:330375デフォルトの名無しさん
2006/07/25(火) 23:25:15思ったりするんですが、実際のところはどうなんでしょうか?
静的でないメンバ変数に触れないなら
その関数は静的にした方がいいと思うのですが。
0376デフォルトの名無しさん
2006/07/26(水) 00:41:22分っちゃいるが便利なんでやっちまうことも多い。
特にすでに書いちゃったメンバ関数の特殊な状況で
this無しで呼びたいってのは、後から出てくるもんだ。
もちろんタコなのは言うまでも無いが。
0377デフォルトの名無しさん
2006/07/26(水) 00:50:47376のようなことはちっとも一般的でないから勘違いしないように、一応ね。
いくら秘密兵器だとしても程がある。
0378デフォルトの名無しさん
2006/07/26(水) 04:41:150379デフォルトの名無しさん
2006/07/26(水) 04:53:12( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←>>378
(_フ彡
0380デフォルトの名無しさん
2006/07/27(木) 13:57:02C++の大抵の本では「vectorやstringを使えばメモリ関連の苦労ともオサラバです」とありますが、
(1)
その理由は「生ポインタと違い、意図せぬメモリ領域にアクセスすることがない(その前に
例外が飛んでくる)から」という理解でいいのでしょうか?
(2)
stringなどで、不正?アクセスは防げても、メモリ不足による各種操作の失敗の可能性は依然残ります。
そんな時は例外が飛んでくるのでしょうが、これの対処としてはどんなのが正統派なのでしょう?
サンプルコードなんかは何もしてないものが多かったのですが、こういうもんなんでしょうか?
それとも念のため、string使う所は常にcatch(...){ /*エラーメッセージ*/ } とかしておく方が
良いスタイルだったりするのでしょうか?
0381デフォルトの名無しさん
2006/07/27(木) 14:26:08basic_stringの場合
§21.3.4
4 The functions described in this clause can report two kinds of errors, each associated with a distinct exception:
? a length error is associated with exceptions of type length_error (19.1.4);
? an out-of-range error is associated with exceptions of type out_of_range (19.1.5).
4a For any string operation, if as a result of the operation, size() would exceed max_size() then the
operation throws length_error.
0382デフォルトの名無しさん
2006/07/27(木) 15:08:19(1)
どういう文脈で「メモリ関連の苦労ともオサラバです」なのか
よくわかんないけどサイズが自動的に拡張されるから、
cの文字列操作関数につきもののバッファオーバーランを防げる...
とかでは?
(2)
全くケースバイケース。
例えばCGIだったら、500 Server Internal Errorでも返すべきかもしれないし、
そんなに重要じゃないアプリケーションなら
キャッチもせずにそのままアプリケーションを落としてもいいだろうし。
あなたがサムソンの社員だったら、メモリモジュールの通販サイトへ
ユーザを案内してもよいでしょう。
0383デフォルトの名無しさん
2006/07/27(木) 16:07:24確かに領域のサイズをあまり気にしなくて良いという点もあるが
もっと大きいのは、リーク(解放しわすれ)を気にしなくてすむことだろう。
誰が確保して、どの段階で誰が責任を持って解放するのか、考えることが無くなる。
(2)
必要ならば使う前後でtryを使うこともあるだろうが
「メモリ不足」は極めて深刻な、回復不能のエラーなため
アプリケーション全体でcatchして、そのまま終了するケースも多い。
もちろん、サービス等の終了してはいけないものは丁寧に管理する必要があるし
データの保存を必要とする場合もあるが。
それでも、普通は「常に前後でtry&catch」という形は採らない。
0384デフォルトの名無しさん
2006/07/27(木) 20:59:54途中でreturnするような関数で、returnの数だけfreeが書いてあるような醜いコードも結構見かける。
vectorやstringでは、デストラクタでメモリを解放してくれるから、そういうようなコードは起こり得ないということ。
スマートポインタと同じ発想だな。
0385デフォルトの名無しさん
2006/07/27(木) 23:31:00test1だとt[500]の配列が新たにスタックに作られるという
違いだけですか?
#include<stdio.h>
#include<stdlib.h>
void test1(int t[500]){
printf("%d ",t[500-1]+1);
}
void test2(int *t){
printf("%d ",t[500-1]+1);
}
void main(){
int *t,i;
t=(int *)malloc(sizeof(int)*500);
for(i=0;i<500;i++)t[i]=i;
test1(t);
test2(t);
free(t);
}
0386デフォルトの名無しさん
2006/07/28(金) 00:00:010387デフォルトの名無しさん
2006/07/28(金) 00:02:51違いはない。同じ。
関数の仮引数の大きさは無視される。
0388デフォルトの名無しさん
2006/07/28(金) 00:24:04printf("%d ",t[500-1]+1);
}
0389デフォルトの名無しさん
2006/07/28(金) 00:27:22#include<stdlib.h>
void test4(int (*t)[500]){
printf("%d ",(*t)[500-1]+1);
}
void test5(int **t){
printf("%d ",(*t)[500-1]+1);
}
void test6(int *t[]){
printf("%d ",(*t)[500-1]+1);
}
void main(){
int *t,i;
t=(int *)malloc(sizeof(int)*500);
for(i=0;i<500;i++)t[i]=i;
test4(&t);
test5(&t);
test6(&t);
free(t);
}
0390デフォルトの名無しさん
2006/07/28(金) 00:30:20#include<stdlib.h>
void test7(int (*t)[500]){
printf("%d ",t[0][500-1]+1);
}
void test8(int **t){
printf("%d ",t[0][500-1]+1);
}
void test9(int *t[]){
printf("%d ",t[0][500-1]+1);
}
void main(){
int *t,i;
t=(int *)malloc(sizeof(int)*500);
for(i=0;i<500;i++)t[i]=i;
test7(&t);
test8(&t);
test9(&t);
free(t);
}
0391デフォルトの名無しさん
2006/07/28(金) 00:35:33#include<stdlib.h>
void testA(int (*t)[500]){
printf("%d ",(*(t+1))[500-1]+1);
}
void testB(int **t){
printf("%d ",(*(t+1))[500-1]+1);
}
void testC(int *t[]){
printf("%d ",(*(t+1))[500-1]+1);
}
void main(){
int (*t)[500],i;
t=(int (*)[500])malloc(sizeof(int [500])*2);
for(i=0;i<500;i++){t[0][i]=i;t[1][i]=i+500;}
testA(t);
testB(t);
testC(t);
free(t);
}
0392デフォルトの名無しさん
2006/07/28(金) 02:45:43ありがとうです。
どういう書き方でも動作は同じなのですね。
0393380
2006/07/28(金) 03:01:24>>381
これはISOの文書でしょうか?非常に参考になります。
大きめの書店なんかで入手できるもんでしょうか?
>>382
オサラバ云々は、イントロで述べられているようなものです。
で、「オーバーフロー関連のことは忘れられても、メモリ不足の状況なんかは依然
考える必要が残ってそうだから、完全にオサラバつうわけじゃないじゃん」と思ったわけです。
(2)で、そのまま落とすとの御意見も大変参考になりました。
>>383
(2)について、例えばアプリケーション全体をcatchするこんなのもアリということでしょうか。
int main(void){
try{ MakeMainWindow(); }
catch (...){ /*エラーメッセージ、ギブアップ宣言、最低限の後始末*/ }
}
>>383
>>384
(1)について納得しました。確かに解放さえきちんとやれれば、被害(リーク)なんてありませんもんね。
0394デフォルトの名無しさん
2006/07/28(金) 03:04:38規格が見たけりゃ↓の一番下のリンクを。
http://pc8.2ch.net/test/read.cgi/tech/1153079297/5
0395デフォルトの名無しさん
2006/07/28(金) 07:52:36std::vector<std::string*> v;
v.push_back( new std::string() );
call_exceptional_function();
}
とか書いて、
fooを抜けるときに new string() で作ったオブジェクトが解放されなくて苦しめ
0396デフォルトの名無しさん
2006/07/28(金) 08:54:060397デフォルトの名無しさん
2006/07/28(金) 10:18:43VisualBasic2005でできますか?
0398デフォルトの名無しさん
2006/07/28(金) 10:30:30確認することはできますか?
0399デフォルトの名無しさん
2006/07/28(金) 10:40:170400デフォルトの名無しさん
2006/07/28(金) 10:42:180401デフォルトの名無しさん
2006/07/28(金) 10:42:23環境によっては可能かも。
0402デフォルトの名無しさん
2006/07/28(金) 10:43:350403デフォルトの名無しさん
2006/07/28(金) 10:44:30void free(void *memblock);
0404デフォルトの名無しさん
2006/07/28(金) 10:51:17できないし、確認する必要が無い。
0405デフォルトの名無しさん
2006/07/28(金) 10:57:39関数呼び出し時かもしれないし
しばらくあとかもしれないし
OSによってはあえて解放しないかもしれない
解放後どうなるかを確認することには意味が無い
確保するときに成功したか失敗したかを知ることの方が重要
0406デフォルトの名無しさん
2006/07/28(金) 11:41:19VB6.0を持っていて、VisualStudioのヘルプが充実しているので
VCもそれでいまさら勉強したいのですが
0407デフォルトの名無しさん
2006/07/28(金) 11:44:22ttp://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
を実行する場合、どのテンプレートを使用したらよいのでしょうか?
空のテンプレートで作成すると、windows.hへのパスが通ってないらしく
そこでエラーになります。
パスを通そうとして、includeフォルダの位置を探したのですが、
そのフォルダの中にwindows.,hがありませんでした。
(C:\Program Files\Microsoft Visual Studio 8\VC\include)
そのままじゃコンパイルできないということなのでしょうか?
0408407
2006/07/28(金) 11:45:49連投すいません。
0409デフォルトの名無しさん
2006/07/28(金) 12:03:20どうすればいい?
0410デフォルトの名無しさん
2006/07/28(金) 12:05:462005スレのテンプレ読んで恋
0412デフォルトの名無しさん
2006/07/28(金) 13:07:570413デフォルトの名無しさん
2006/07/28(金) 13:57:330414デフォルトの名無しさん
2006/07/28(金) 14:20:310415409
2006/07/28(金) 14:27:33環境依存なソースはあんまり書きたくないので
C風な書き方で妥協しとくことにします・・・。
俺は負け犬だぁぁぁぁ
0416デフォルトの名無しさん
2006/07/28(金) 17:11:37を扱う方法を教えていただきたいのですが、どなたかわかる方いらっしゃいますか?
0417デフォルトの名無しさん
2006/07/28(金) 17:14:200418デフォルトの名無しさん
2006/07/28(金) 17:18:04thisに&をつけてみたのですが、non-value unary '&'というエラーが出ました。
0419デフォルトの名無しさん
2006/07/28(金) 17:18:55&いらないよ
0420デフォルトの名無しさん
2006/07/28(金) 17:29:39仰るとおりにやったら動きました。
すいません、こんな基本的なことを知らなくて。
本当に助かりました。
ありがとうございました。
0421デフォルトの名無しさん
2006/07/28(金) 18:00:370422デフォルトの名無しさん
2006/07/28(金) 18:04:40MAXPATH
0423デフォルトの名無しさん
2006/07/28(金) 18:09:57MAX_PATH
0424デフォルトの名無しさん
2006/07/28(金) 18:19:27W系APIを使えば、MAX_PATHよりずっと長いファイル名が作れたりする。
一応、予備知識として。
0425デフォルトの名無しさん
2006/07/28(金) 18:55:50Visual Studio Professional Edition with MSDN Professional Subscription
を手に入れれば、VC++6.0もついてくるよ
0426デフォルトの名無しさん
2006/07/28(金) 20:34:56stdlib.hのは _MAX_PATH だよ。
MAX_PATH はSDK。
0427デフォルトの名無しさん
2006/07/28(金) 23:03:02教えていただいて有難うございます。
http://www.microsoft.com/japan/msdn/howtobuy/vs2005/subscriptions/
の 通常パッケージ 158,000 円
アップグレード パッケージ [対象] 94,800 円
っていう奴のことでしょうか?
前からMicrosoftのwebは見ていましたが、何回見ても製品の内容物とかが
全然わからず、たまりかねて今回質問してみました。各パッケージの内容
物がわかるようなサイトってどこかにありませんでしょうか?
0428デフォルトの名無しさん
2006/07/28(金) 23:12:210429デフォルトの名無しさん
2006/07/28(金) 23:38:46どっちも言語の標準規格には無い。
0430デフォルトの名無しさん
2006/07/29(土) 01:43:02みたいなコンパイル時定数があるとして、これをコンパイル時に文字列定数化する方法ってありますか?
マクロでも何でもいいです。いろいろ考えたけど、どうも思いつかない。
イメージとしてはこんな感じで
static const char str[] = "N = " TO_STRING(N);
この時の「定数」っていうのは、const 定数や enum 値であって、
以下のようなものは不可とします。
#define N 100
0431デフォルトの名無しさん
2006/07/29(土) 02:05:50template meta programing を駆使すればなんとかなるかもしれない。
こんな感じ?
template<int N> struct formated_int { static char const value[]; };
もしかしたら boost に混ざってるかもしれない。
0432デフォルトの名無しさん
2006/07/29(土) 03:58:27VB6にて作成したActiveX DLLをVC++2003で参照したいのですが、
スマートポインタを使用する方法(#importする方法)ではなく、
win32APIの"LordLibrary"のように明示的にリンクさせる方法を
ご存知ないでしょうか?
質問をする背景を簡単に書きますと以下のようになります。
・複数のActiveX DLLを呼び出し側(VC)のプログラム実行中にロードしなければならない
・DLLの名称、数ともに不定であり、#importでは対応できない
・DLLのPATH、ロードトリガは別モジュールから共有メモリを介して呼び出し側(VC)へ通知する
・全DLL内には公開されている同一名称のクラスとメソッドが存在している
以上、よろしくお願い致します。
0433デフォルトの名無しさん
2006/07/29(土) 04:47:18逆にすれば、boost::lexical_castが使えるんでないかい
0434デフォルトの名無しさん
2006/07/29(土) 08:49:37GlobalAlloc
malloc
new
メモリ確保がいろいろあるんですけど、どれが一番いいのでしょうか?
↓調べてみた。
すべて最終的にはHeapAllocで確保する
newでは一回使うとフリーメモリリストに登録され二度目では高速に確保できる、しかし、断片化しやすい。
速度ではHeapAllocが爆速。
小さい奴はnewででかい奴はHeapAllocで。
mallocはクラスに向かない、ごみ。
0435デフォルトの名無しさん
2006/07/29(土) 09:06:390436デフォルトの名無しさん
2006/07/29(土) 09:18:07いざとなったらoperator newをオーバーロードすればいいんだし。
0437デフォルトの名無しさん
2006/07/29(土) 09:25:48newでおkってことですか。
今使ってる
サンプルがHeapAlloc とか使っていて気になったけど
newに直しとくか。
0438デフォルトの名無しさん
2006/07/29(土) 10:18:200439デフォルトの名無しさん
2006/07/29(土) 10:19:550440デフォルトの名無しさん
2006/07/29(土) 13:41:57後ろからコピーしたいのですが、一個一個後ろからしていくのしか方法はないのでしょうか!?
0441デフォルトの名無しさん
2006/07/29(土) 13:58:190442デフォルトの名無しさん
2006/07/29(土) 14:12:200443デフォルトの名無しさん
2006/07/29(土) 14:18:180444デフォルトの名無しさん
2006/07/29(土) 14:23:300445M
2006/07/29(土) 15:02:332.float型ポイント変数aにfloat型変数numberのアドレスを代入する。
3.ポインタ変数aが指すオブジェクトの値を1インクリメントする。
4.文字型配列aに格納されてる文字列をプリントする。
C言語でどうやってプログラムするんですか?(><)
0446デフォルトの名無しさん
2006/07/29(土) 15:14:362. flat *a = &number;
3. a++;
4. printf("%s", a);
0447デフォルトの名無しさん
2006/07/29(土) 15:15:33×flat *a
○float *a
3.
×a++;
○(*a)++;
0448デフォルトの名無しさん
2006/07/29(土) 15:15:591. double *dPtr;
2. a = &number;
3. (*a)++;
4. printf("%s", a);
あとポイントじゃなくてポインタな
0449デフォルトの名無しさん
2006/07/29(土) 15:33:590450デフォルトの名無しさん
2006/07/29(土) 15:34:42マルチすなや。
>>446、>>448
あんたらは重大なミスを犯している。>445では「duble型」とあるぞ。
0451デフォルトの名無しさん
2006/07/29(土) 15:37:000452デフォルトの名無しさん
2006/07/29(土) 15:38:23>>447
0453デフォルトの名無しさん
2006/07/29(土) 15:40:170454デフォルトの名無しさん
2006/07/29(土) 15:41:03いやーこれはどういう働きをするんだろうね?
0455デフォルトの名無しさん
2006/07/29(土) 15:42:17ほんとだ!何のことかと思った!
0456デフォルトの名無しさん
2006/07/29(土) 15:48:43せっかくだからお茶にするドゥーブル
0457デフォルトの名無しさん
2006/07/29(土) 17:51:220458デフォルトの名無しさん
2006/07/29(土) 17:57:170459デフォルトの名無しさん
2006/07/29(土) 18:12:320460デフォルトの名無しさん
2006/07/29(土) 18:14:59例えばどんな場合ですか?
<>内にtypenameを使う場合に限る。
0461デフォルトの名無しさん
2006/07/29(土) 18:19:21そもそもそんな事できたっけ
0462デフォルトの名無しさん
2006/07/29(土) 18:32:26>>459は何かを勘違いしていると思われ。
で、>>457は>>458の言うとおり同じ意味。
0463デフォルトの名無しさん
2006/07/29(土) 18:43:580464デフォルトの名無しさん
2006/07/29(土) 21:32:22たとえば、関数ポインタを登録する関数
long EntryCallBack(voiid (_stdcall *pCallBackFunc) (char* pSolidRefer));
は正しいのに,、登録した関数ポインタを取得する関数は
voiid (_stdcall *) (char* pSolidRefer)) Function();
エラーになってしまいます。
0465デフォルトの名無しさん
2006/07/29(土) 21:34:010466デフォルトの名無しさん
2006/07/29(土) 21:39:42void (_stdcall *Function())(char* pSolidRefer);
だけど、素直に typedef した方がいい。
0467464
2006/07/29(土) 22:37:060468デフォルトの名無しさん
2006/07/30(日) 15:18:55template<class T> class ABC { 宣言 };
typedef ABC<long> ABC32;
としていて、
DEF.h で ABC32 のポインタだけを使用しているので、
ABC.h をインクルードせず、前方宣言だけで、
class ABC32;
void Func1(ABC32* abc);
とした。
次に、Func1 の実装をするために DEF.cpp で
#include "DEF.h"
#include "ABC.h"
void Func1(ABC32* abc) { 実装 }
としてコンパイルしたところ、コンパイラ (VC2003) が、
ABC32 を再定義した、というエラーを吐いた。
どうしたら意図どおりのことをできるでしょうか。
0469デフォルトの名無しさん
2006/07/30(日) 15:39:20//typedef ABC<long> ABC32;
class ABC32 : public ABC<long> {
};
0470デフォルトの名無しさん
2006/07/30(日) 15:59:06これだと、コンストラクタや代入演算子を再定義しないといけないのでは。
0471デフォルトの名無しさん
2006/07/30(日) 16:08:38class ABC32;
という前方宣言がおかしい。
ABC32はクラスじゃない。
template<typename T> class ABC; //ABCの前方宣言
typedef ABC<long> ABC32; //ABC32の別名定義
0472デフォルトの名無しさん
2006/07/30(日) 16:21:16ABC32をクラスとしたいなら>>469
ABC<long>の別名としたいならDEF.hで
//class ABC32;
template <class T> class ABC;
typedef ABC<int> ABC32;
void Func1(ABC32* abc);
0474デフォルトの名無しさん
2006/07/30(日) 17:00:37http://ex16.2ch.net/test/read.cgi/news4vip/1154167137/
まとめ
http://vanbl.blog.shinobi.jp/
現在新しい専ブラを開発中ですプログラミングに詳しい方
>>1にアドバイスをお願いします
0475デフォルトの名無しさん
2006/07/30(日) 18:36:23例外が発生したときの処理が遅いだけで、
例外が滅多にスローされなければ、遅くならないよね?
0476デフォルトの名無しさん
2006/07/30(日) 18:47:21どこまで遅くなるかは実測してみれ。
0477デフォルトの名無しさん
2006/07/30(日) 18:51:45速度は実測が基本。
>>476
try の出入りで処理を入れない実装もある。
0478デフォルトの名無しさん
2006/07/30(日) 18:59:45実測するまでもなく遅くなる。
0479デフォルトの名無しさん
2006/07/30(日) 19:05:07君は人のレスを読んでいるのだろうか・・・
0480デフォルトの名無しさん
2006/07/30(日) 19:21:44読みましたが何か
0481デフォルトの名無しさん
2006/07/30(日) 19:29:05なんて処理系?
0482デフォルトの名無しさん
2006/07/30(日) 20:17:200483デフォルトの名無しさん
2006/07/30(日) 20:35:050484デフォルトの名無しさん
2006/07/30(日) 22:04:020485デフォルトの名無しさん
2006/07/30(日) 22:05:43大丈夫。
0486デフォルトの名無しさん
2006/07/30(日) 22:06:510487デフォルトの名無しさん
2006/07/30(日) 22:40:19デマを流さないように。
0488デフォルトの名無しさん
2006/07/31(月) 00:42:39何を根拠にデマだと言うの?
http://gcc.gnu.org/ml/java/2004-08/msg00028.html
0489デフォルトの名無しさん
2006/07/31(月) 00:45:180490デフォルトの名無しさん
2006/07/31(月) 02:52:300491デフォルトの名無しさん
2006/07/31(月) 02:54:260492デフォルトの名無しさん
2006/07/31(月) 03:39:16投げなくても遅くなるのかどうか、が問題になっている。
0493デフォルトの名無しさん
2006/07/31(月) 03:58:54割り込みでも使わない限り、ソフトウェア的にオーバーヘッドゼロというのは
絶対に無理だ。
0494デフォルトの名無しさん
2006/07/31(月) 04:26:500495デフォルトの名無しさん
2006/07/31(月) 04:28:080496デフォルトの名無しさん
2006/07/31(月) 04:30:55まあ、ないだろうけども。
0497デフォルトの名無しさん
2006/07/31(月) 04:44:14スタックの巻き戻しをカットしてしまう事はあるかもしれん。
関数の入り口にスタッククリーンアップの準備を置くのも、
throw文の有無によってカットできるかもしれんし。
0498デフォルトの名無しさん
2006/07/31(月) 05:15:58条件によって例外が投げられうる状況を
仮定したので構わないと思う。
ただ、実測してみようとテストしてみるときには
そのあたりを注意する必要はありそうだ。
0499デフォルトの名無しさん
2006/07/31(月) 05:36:38自分で実行中のプロセスと比較しないといけないのかな。
0500デフォルトの名無しさん
2006/07/31(月) 05:59:410501デフォルトの名無しさん
2006/07/31(月) 07:47:470502デフォルトの名無しさん
2006/07/31(月) 07:58:04>>499-501
>>499-501
>>499-501
>>499-501
>501 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/31(月) 07:47:47
>誰もWindowsとは書いていないわけだが。
>501 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/31(月) 07:47:47
>誰もWindowsとは書いていないわけだが。
>501 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/31(月) 07:47:47
>誰もWindowsとは書いていないわけだが。
>501 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/31(月) 07:47:47
>誰もWindowsとは書いていないわけだが。
>501 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/31(月) 07:47:47
>誰もWindowsとは書いていないわけだが。
池沼はプログラミングなどしないほうが良い
0503デフォルトの名無しさん
2006/07/31(月) 09:48:00ありがとうございます。まさにピンポイントで欲しいAPIでした。
>>501
すいません、Windowsの事です。
>>502
えと、なんというかすいません。501さんは499に書き込みした私ではないです。
0504デフォルトの名無しさん
2006/07/31(月) 11:04:23もしあんたが>500なら、それこそレスなどしない方がいいぞ。
0505デフォルトの名無しさん
2006/07/31(月) 11:24:170506デフォルトの名無しさん
2006/07/31(月) 11:36:350507デフォルトの名無しさん
2006/07/31(月) 11:40:48ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00096.html
0508デフォルトの名無しさん
2006/07/31(月) 12:08:28g++ -Sの結果が根拠。
0509デフォルトの名無しさん
2006/07/31(月) 12:35:58Windows だよね?
0510デフォルトの名無しさん
2006/07/31(月) 13:15:21Linuxだけど、Windowsかどうかなんて関係あんのか?
0511デフォルトの名無しさん
2006/07/31(月) 13:55:37#include <stdio.h>
int main(void) {
int *p, q;
q=199;
p=&q;
printf("%d\n", *p);
return 0;
}
上記のプログラムで、
ポインタの説明をしているところを勉強中なのですが、
なぜ、int pと定義せずに、int *pと定義するのかが分かりません。
*が演算子なら、int pで宣言し、プログラム中で*pという
演算をすれば良いのでは?と思うのですが。
また、なぜ、int *p で定義すれば、プログラム中で、
pが変数宣言も無しで使用可能なのでしょうか?
0512デフォルトの名無しさん
2006/07/31(月) 13:59:530513デフォルトの名無しさん
2006/07/31(月) 14:19:06こう書けばわかりやすいか
でも
int* p, q;
とか書くと勘違いするよな
0514デフォルトの名無しさん
2006/07/31(月) 14:36:30早速のお返事ありがとうございます。
>int* p;
>こう書けばわかりやすいか
しかし、正直分かるようで、分かりません。
演算子が変数宣言のところに登場するのが、納得できないのです。
加算演算子とポインタ演算子が、
性質が異なっているのを分かった上で
誤解を恐れずに書くと、
int -p や、int /p みたいなことをやっているのはどうしてだろうと考えてしまうのです。
とにかく、今はこういうもんだという風な覚え方をしておきます。
Cの全体を把握した上で、再度考えますね。
0515デフォルトの名無しさん
2006/07/31(月) 14:46:29ポインタ演算子というか、関節演算子は、四則演算子とは質がまるっきり
違うとだけ書いておくね。
0516デフォルトの名無しさん
2006/07/31(月) 14:46:56○間接
馬鹿な変換してしもた・・・
0517デフォルトの名無しさん
2006/07/31(月) 14:55:14typedef int *int_ptr;
int main(void){
int_ptr p;
int q;
q = 199;
p = &q;
printf("%d\n", *p);
return 0;
}
0518デフォルトの名無しさん
2006/07/31(月) 15:05:39おおっ、よく分かりました。
ありがとうございます。
0519デフォルトの名無しさん
2006/07/31(月) 15:18:180520デフォルトの名無しさん
2006/07/31(月) 15:22:550521デフォルトの名無しさん
2006/07/31(月) 15:50:530522デフォルトの名無しさん
2006/07/31(月) 16:02:490523デフォルトの名無しさん
2006/07/31(月) 18:39:000524デフォルトの名無しさん
2006/07/31(月) 19:11:280525デフォルトの名無しさん
2006/07/31(月) 20:55:540526デフォルトの名無しさん
2006/07/31(月) 22:24:490527デフォルトの名無しさん
2006/07/31(月) 22:42:560528デフォルトの名無しさん
2006/07/31(月) 22:57:130529デフォルトの名無しさん
2006/07/31(月) 22:58:52STL に vector があるので、これは使いたくありません。
class XYZ とか class Coord3 とかどうかなと思っていますが、
何かいい名前はありませんか?
0530デフォルトの名無しさん
2006/07/31(月) 23:00:180531デフォルトの名無しさん
2006/07/31(月) 23:07:18ありがとう。そっちに移動するよ。
0532デフォルトの名無しさん
2006/08/01(火) 00:18:31int *p; の * は、演算子じゃない。
p が「int オブジェクトを指すポインタ型」である事を表す記号だ。
0533デフォルトの名無しさん
2006/08/01(火) 00:53:22http://gcc.gnu.org/ml/java/2004-08/msg00050.html
(リンク先は Java の ML だけど、言語間で共通な例外処理部分についての話)
まぁ Windows が除かれる時点で「 try の出入りで処理を入れない実装」の例として
「 gcc とか」というのはマズイな。訂正しよう。
>>481
gcc のうち、 Windows を含む一部のターゲット環境を除いたもの。
0534デフォルトの名無しさん
2006/08/01(火) 01:45:020535デフォルトの名無しさん
2006/08/01(火) 02:00:00速度は実測が基本。
0536デフォルトの名無しさん
2006/08/01(火) 02:00:240537デフォルトの名無しさん
2006/08/01(火) 02:04:34バカの一つ覚えかよ
>>536
はいはい。具体的な環境挙げられるようになってから言ってね。
0538デフォルトの名無しさん
2006/08/01(火) 02:04:52客観的に定義できると思うけど、思わないのなら別にいい。
0539デフォルトの名無しさん
2006/08/01(火) 02:07:04環境はAIX 5.2
gccは
Using built-in specs.
Target: powerpc-ibm-aix5.2.0.0
Configured with: ../configure --with-as=/usr/bin/as
--with-ld=/usr/bin/ld --disable-nls --enable-languages=c,c++
--prefix=/opt/freeware --enable-threads
--enable-version-specific-runtime-libs --host=powerpc-ibm-aix5.2.0.0
Thread model: aix
gcc version 4.0.0
でbochsをコンパイルしています。
aix標準の/usr/ccs/binのldでコンパイルすると
g++ -o bochs -g -O2 -D_LARGE_FILES -DBX_SHARE_PATH=\"/usr/local/share/bochs\"
logio.o main.o config.o load32bitOShack.o pc_system.o osdep.o plugin.o crc.o
iodev/libiodev.a cpu/libcpu.a memory/libmemory.a gui/libgui.a disasm/libdisasm.a
fpu/libfpu.a -lSM -lICE -lX11 -lXpm -lm
ld: 0711-317 ERROR: Undefined symbol: vtable for __cxxabiv1::__si_class_type_info
ld: 0711-317 ERROR: Undefined symbol: vtable for __cxxabiv1::__vmi_class_type_info
ld: 0711-317 ERROR: Undefined symbol: vtable for __cxxabiv1::__class_type_info
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: ld returned 8 exit status
gmake: *** [bochs] Error 1
と出てエラーになります。
0540デフォルトの名無しさん
2006/08/01(火) 02:10:53コンパイルしたのですが、今度も
/bin/sh ./libtool --mode=link g++ -o bochs -g -O2 -D_LARGE_FILES
-DBX_SHARE_PATH='"/usr/local/share/bochs"' -export-dynamic logio.o
main.o config.o load32bitOShack.o pc_system.o osdep.o plugin.o
crc.o iodev/libiodev.a cpu/libcpu.a memory/libmemory.a gui/libgui.a disasm/libdisasm.a
fpu/libfpu.a -lSM -lICE -lX11 -lXpm -lm
g++ -o bochs -g -O2 -D_LARGE_FILES -DBX_SHARE_PATH=\"/usr/local/share/bochs\" logio.o
main.o config.o load32bitOShack.o pc_system.o osdep.o plugin.o crc.o
-Wl,--export-dynamic iodev/libiodev.a cpu/libcpu.a memory/libmemory.a
gui/libgui.a disasm/libdisasm.a fpu/libfpu.a -lSM -lICE -lX11 -lXpm -lm
/usr/bin/ld: config.o: reloc .data:0 not in csect
config.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: The error code from the last command is 1.
と出ます。
これはどんなエラーで、ソースちょっとソースをいじればコンパイルできるようなものなんでしょうか?
0541デフォルトの名無しさん
2006/08/01(火) 10:44:41JIS X 3012:2003 8. 宣言子 第2パラグラフ
> 宣言子は,*(へのポインタ)及び()(を返す関数)などの演算子を含めることで
> 指定子の型を変更することができる。
0542デフォルトの名無しさん
2006/08/01(火) 12:10:59と言うことで宜しいか。
0543デフォルトの名無しさん
2006/08/01(火) 13:04:39#include <stdio.h>;
int main(void)
{
char *cp, ch;
int *ip, i;
float *fp, f;
double *dp, d;
cp=&ch;
ip=&i;
fp=&f;
dp=&d;
printf("%p %p %p %p\n", cp, ip, fp, dp);
cp++;
ip++;
fp++;
dp++;
printf("%p %p %p %p\n", cp, ip, fp, dp);
return 0;
}
を実行すると、
0013FF57 0013FF3C 0013FF24 0013FF08
0013FF58 0013FF40 0013FF28 0013FF10
続行するには何かキーを押してください . . .
となるんですが、doubleの値がおかしいのは何故でしょうか?
いくらプログラムを見直してもミスが見つけられません。
0544デフォルトの名無しさん
2006/08/01(火) 13:06:510545デフォルトの名無しさん
2006/08/01(火) 13:10:27sizeof(type) と (int)((char *)((type*)1) - (char *)((type *)0)) が食い違うのか?
0546デフォルトの名無しさん
2006/08/01(火) 13:35:54そう言うことです。
本には加算すると型のバイト数が加算されるとあったので、
0013FF08からdp++すると、0013FF12にならなければいけないんじゃないかと思いました。
0547デフォルトの名無しさん
2006/08/01(火) 13:39:22543,546の質問は忘れて下さい。
16進数だということを忘れてましたorz
0548デフォルトの名無しさん
2006/08/01(火) 13:39:50sizeof(double) を見てから考えなさい。
0549デフォルトの名無しさん
2006/08/01(火) 14:32:26なんか、癒されるなぁ…。 こういうミスは、ほのぼのしてていいw
0550デフォルトの名無しさん
2006/08/01(火) 18:09:200552デフォルトの名無しさん
2006/08/01(火) 19:02:25実現したいんだけどどうすればいいでしょう。
たとえば、aryを適当な配列だとして、その順列すべてを表示するのを
for(it = ary.permutaion_start(); it != ary.permutaion_end(); it++) {
cout << *it << endl;
}
のように書きたいんです。
it++ の実装をどう言うふうにしたらいいかがさっぱり。
参考になるサイトがあったら教えてください。
0553デフォルトの名無しさん
2006/08/01(火) 19:40:32で、その「配列」とやらはどういう実装になってんだね?
それがわからんと何とも言えん
0554デフォルトの名無しさん
2006/08/01(火) 20:26:49それSTLコンテナと何が違うの?
0555デフォルトの名無しさん
2006/08/01(火) 21:05:04コンパイラ : gcc-4.0.1
上の環境で、Cでプログラム作っているのですが、
シェルの外部コマンドを exec 等で実行する様に
組み込みコマンドもプログラム中で実行したいのですが、
調べてみても求める物を見つけられませんでした。
よければどなたか教えていただけないでしょうか?
0556デフォルトの名無しさん
2006/08/01(火) 21:37:41#include <stdlib.h>
int system(const char *string);
で何とかならないかな?
0558デフォルトの名無しさん
2006/08/01(火) 22:15:020559デフォルトの名無しさん
2006/08/01(火) 22:38:56> で、その「配列」とやらはどういう実装になってんだね?
具体的に直面している問題では、aryに対応するのは自作クラスだし
permtationに関してももっと難しい処理になります。
できるだけ汎用性のある方法が知りたいし、シンプルなものがいいと思って、
あのような例を挙げました。
>>554
STLで与えられる標準的なコンテナクラスは、it から it++ が求めやすいような
ものばかりだと思うのですが、私がやりたいのは
ttp://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF
のPythonのところにある、「ジェネレータ関数によって内部イテレータを作成」というのと
似たようなことです。
0560デフォルトの名無しさん
2006/08/01(火) 22:53:58class myArray{
public:
typedef Containee *iterator;
// ...
};
0561デフォルトの名無しさん
2006/08/01(火) 22:56:31C++でジェネレータを書く簡単な方法はないと思う。
問題に特化した書き方を工夫するか(たとえば順列はstd::next_permutationで列挙できる)、
「次に何をするか」を示す関数オブジェクトをイテレータ内部に保存するとかの方法が一応ある。
0562デフォルトの名無しさん
2006/08/01(火) 22:58:30>のPythonのところにある、「ジェネレータ関数によって内部イテレータを作成」というのと
>似たようなことです。
リンク先を読んでみたけど552の例は全然似てなくないかい?
0563デフォルトの名無しさん
2006/08/01(火) 23:02:44例えば
for(...) for(..) std::cout << p << "\n";
というような順列を列挙するアルゴリズムがあったとして、yield文があればこれをそのまま
for(...) for(...) yield p;
と書き換えることで順列を列挙するイテレータが出来上がるって事だろ。
0564デフォルトの名無しさん
2006/08/01(火) 23:36:37シェーカーソート法というのを本で読んでやろうとして
以下のように書いたところコンパイルしたけど上手く動きません。
ダメな所をどなたか教えてください。
ちなみに要素数6の配列を受け取る関数です。
void sort(int x[])
{
int i,tmp;
int lp,rp;
lp=0;rp=5;
do{
for(i=lp;i<rp;i++)
if(x[i]>x[i+1]){tmp=x[i];x[i]=x[i+1];x[i+1]=tmp;}
rp=i;
for(i=rp;i>lp;i--)
if(x[j-1]>x[j]){tmp=x[j-1];x[j-1]=x[j];x[j]=tmp;}
lp=i;
}while(lp<rp);
}
0565デフォルトの名無しさん
2006/08/01(火) 23:39:50>>564を訂正です。
void sort(int x[])
{
int i,tmp;
int lp,rp;
lp=0;rp=5;
do{
for(i=lp;i<rp;i++)
if(x[i]>x[i+1]){tmp=x[i];x[i]=x[i+1];x[i+1]=tmp;}
rp=i;
for(i=rp;i>lp;i--)
if(x[i-1]>x[i]){tmp=x[i-1];x[i-1]=x[i];x[i]=tmp;}
lp=i;
}while(lp<rp);
}
0566552
2006/08/01(火) 23:47:56なるほど。一般的な方法となると難しいようですね。
std::next_permutaionは読んでみます。
>>562
説明下手で、本意が伝わらなくてすみません。
>>563が説明されているようなのが、まさに私が欲しているものです。
皆さん、レスありがとうございました。
0567デフォルトの名無しさん
2006/08/01(火) 23:57:19デバッガ使ったりprintfを埋め込んでコードを追いかけろ。
デバッグはプログラマにとってコードを書くのと同じかそれ以上に重要な仕事だ。
あと「上手く動きません」じゃなくて、具体的にどうなったのか書け。
現象は原因を探る重要な手掛かりだ。
0568デフォルトの名無しさん
2006/08/02(水) 00:16:02mainも含めて書くと
void sort(int x[])
{
int i,tmp;
int lp,rp;
lp=0;rp=5;
do{
for(i=lp;i<rp;i++)if(x[i]>x[i+1]){tmp=x[i];x[i]=x[i+1];x[i+1]=tmp;}
rp=i;
for(i=rp;i>lp;i--)if(x[i-1]>x[i]){tmp=x[i-1];x[i-1]=x[i];x[i]=tmp;}
lp=i;
}while(lp<rp);
}
int main()
{
int i;
int a[6]={12,53,22,64,11,9};
printf("並び替えを行います。");
sort(a);
printf("並び替えました\n");
for(i=0;i<6;i++)
printf("%d番目に小さい数は%d\n",i+1,a[i]);
return 0;
}
こうなのですが、実行すると「並び替えを行います」で止まります。エラーで終了とかでなく、sort関数が終わらないのかな?って感じでその後は表示されません。
あとホントに学び初めなのでデバッグとかはよく分からないです;
0569デフォルトの名無しさん
2006/08/02(水) 00:22:16rp=i と lp=i に意味が無い。
0570デフォルトの名無しさん
2006/08/02(水) 00:32:38直りましたっ!
i++とi--の働くタイミングを勘違いしていました><;
ホントにありがとうございます!!
0571デフォルトの名無しさん
2006/08/02(水) 00:34:02要所要所でprintfで変数の値を表示させるなりして
意図通り動いているか・どこでおかしくなっているのか確認する。
0572デフォルトの名無しさん
2006/08/02(水) 10:06:03こうすると
i[0]〜i[19]
まで確保されるんですよね?
i[20]で動かしても正常・・・なんでやろ
0573デフォルトの名無しさん
2006/08/02(水) 10:10:19C言語ではそういうのを「未定義動作」としていて、
何が起こっても文句は言えないプログラムとしている。
チェックしてエラーを発生させたりしてくれない。
自分の身は自分で守れということ。
0574デフォルトの名無しさん
2006/08/02(水) 10:35:02ゆえにC言語でもそんなことしない。
0575デフォルトの名無しさん
2006/08/02(水) 10:54:18x86ならbound命令がある。使われた試しはないようだが。
0576生半可な知識に基づく半端な説明乙
2006/08/02(水) 10:56:43一般的なCPUにローテート命令なんてのがあるわけですが、
C言語にないのはなぜですか?
一般的なCPUに参考演算子相当の命令なんてないのに
C言語にあるのはなぜですか?
0577デフォルトの名無しさん
2006/08/02(水) 10:58:58言語仕様を定めた人間達がそれを含めないと決めたからです。
そんなことも知らないのですか?
0578デフォルトの名無しさん
2006/08/02(水) 11:00:370579デフォルトの名無しさん
2006/08/02(水) 11:06:16とりあえずこのスレの人を何故か尊敬したw
0580デフォルトの名無しさん
2006/08/02(水) 11:08:410581デフォルトの名無しさん
2006/08/02(水) 11:11:04ここ2ちゃんで自分の知識を語りたいんだね
でも知識を人と比較する機会が無いから内容は
頓珍漢なんだね。
君の知識はすばらしいからあまり公開せず大事に自分の中に
しまっておくのがいいよ。
0582デフォルトの名無しさん
2006/08/02(水) 11:19:470583デフォルトの名無しさん
2006/08/02(水) 11:36:50そんなムキにならなくても。君だっていつかは物知りになれるさ。たぶん。あるいは。もしかしたら。
0584デフォルトの名無しさん
2006/08/02(水) 12:07:08ググッてみよう。
トップで表示されるのは…
JavaA2Z【三項演算子とは】
違うんだよ、参考演算子を知りたいんだよ!
んっ?待てよ…。
三項演算子かい!!
0585デフォルトの名無しさん
2006/08/02(水) 12:16:07休みが終わるまでの間ずっと馬鹿丸出しの屁理屈で粘着されるから
そういうのはやめたほうがいいよ。
0586デフォルトの名無しさん
2006/08/02(水) 15:17:30あれでポインタ演算子*の置き換えって出来るんでしょうか
0587デフォルトの名無しさん
2006/08/02(水) 15:37:480588デフォルトの名無しさん
2006/08/02(水) 15:58:000589デフォルトの名無しさん
2006/08/02(水) 20:43:07「佳代とうとう運命の時が来たね☆」
「なにが運命の時よ。」
友人のめぐみの前では素っ気ないそぶりをしてたけど私の胸の鼓動は高まっていた。
前田は小さいころからの幼なじみ。
ぼーっとしてて私がいつも面倒を見ていた。
でもやっぱし私は前田が好きなんだ・・・。
放課後がやってきた。
「なによ?こんなところに呼んで?何の用?」
「おっ・・お前をバブルソート!」
「きゃっ!」
0590デフォルトの名無しさん
2006/08/02(水) 21:06:50オチがわからん
0591デフォルトの名無しさん
2006/08/02(水) 21:14:10一般的なレスにオチをつけろ命令なんてないからねぇ。
ゆえに>>589のレスでもそんなことしない。
0592デフォルトの名無しさん
2006/08/02(水) 21:27:120593デフォルトの名無しさん
2006/08/02(水) 22:05:190594デフォルトの名無しさん
2006/08/03(木) 02:45:51そもそもオペレーターオーバーライドなどというモノはC++には存在しない。
0595デフォルトの名無しさん
2006/08/03(木) 08:58:190596デフォルトの名無しさん
2006/08/03(木) 22:18:30ワロタ
0597デフォルトの名無しさん
2006/08/04(金) 02:53:31>>590
0598デフォルトの名無しさん
2006/08/04(金) 10:29:13int a=3;
double b=0.1415;
double sum= a+ b;
ってのがあったとき、
doubole sum= (double)a+ b;
みたいに型キャストを明示した方がよいのでしょうか?
こんな簡単なプログラムではどっちでもいいような気がしますが、
明示した方が煩雑なプログラムを組むのにはメリットがあるというのであれば、
今のうちから癖をつけときたいのです。
まだ、煩雑なプログラムを書けないので
暗黙で変換したときのメリットデメリット、
明示的に変換したときのメリットデメリットが分からないので、
変な質問をさせて頂きました。
よろしくお願いします。
0599デフォルトの名無しさん
2006/08/04(金) 11:14:26その例だとメリットもデメリットもない。
intはdoubleに変換せざるを得ないしその変換自体は安全に行なわれるから。
仮にsumがfloatだったらfloat sum = (float)(a + b);のように明示したほうがいい。
#敢えて書かずにコンパイラに警告を出させると言う選択もある。
0600598
2006/08/04(金) 14:33:22確かに、この例ではメリット、デメリットもないですね。
ただ、今後大きなプログラムを書く場合、
どうなのかなと思ったのですが。
メリットデメリットを見極めるためにも、面倒ではありますが、
当分明示して様子みます。
0601デフォルトの名無しさん
2006/08/04(金) 15:17:36int a = 2;
double b = 3.5;
double c = 1 / a + b;
みたいなことを平気でするようになるから
明示する癖つけといた方がいいよ。
0602デフォルトの名無しさん
2006/08/04(金) 16:43:110603デフォルトの名無しさん
2006/08/04(金) 17:14:500604デフォルトの名無しさん
2006/08/04(金) 17:57:33int sum = 0;
int i;
for(i = 0; i < n; ++i) {
sum += values[i];
}
printf("合計: %d, 平均: %f", sum, sum / n);
}
とか。
0605デフォルトの名無しさん
2006/08/04(金) 18:20:10おっちょこちょいな俺でも、さすがにそれは無い。
0606デフォルトの名無しさん
2006/08/04(金) 19:04:56set_kahenko(kazu, ...);
}
可変個仮引数の...を可変個実引数に使いたいのですが、
当然エラーになります。
なので、今はいろんな関数で使いたい、
可変個引数の加工の処理をマクロで行っていますが、
通常の関数でやる方法がありましたら教えてください。
0607デフォルトの名無しさん
2006/08/04(金) 19:12:40stdarg.hでぐぐれ
0609606
2006/08/04(金) 19:40:49va_start化したmarkerを渡せばいいわけですね。
0610デフォルトの名無しさん
2006/08/04(金) 20:40:49fseek(before, 2L, SEEK_CUR);
fgetpos(before, pos);
while( (c=fgetc(before)) != '<' ) count++;
fsetpos(before, pos);
fread(score, 1, count, before);
printf("%s\n", score);
としたところファイル位置指示子が戻ってこず、'<'の後の内容が出力されます。
何がいけないのでしょうか?
0611デフォルトの名無しさん
2006/08/04(金) 21:14:15exeファイルに画像(データ)をいけたいのですがどうすればいいでしょうか??
0612デフォルトの名無しさん
2006/08/04(金) 21:17:30WindowsのEXEならリソースとしてくっつけろ。
0613デフォルトの名無しさん
2006/08/04(金) 21:18:39pos の定義は?
0614610
2006/08/04(金) 21:34:14定義でポインタとして宣言していたためにうまく働かなかったようです。
0615あばよ
2006/08/04(金) 22:34:57修正求めていいですか?
0616デフォルトの名無しさん
2006/08/04(金) 22:37:04C#>C++>C なんですかね?
NETが分からん、、、新しい言語ってことでしょうか?
0617デフォルトの名無しさん
2006/08/04(金) 22:40:36ActiveXというのを使えばいいのですか?
何かお薦めの書籍やサイトあります?
0618デフォルトの名無しさん
2006/08/04(金) 22:44:06・・・>実行ファイル名 コマンドライン引数(処理するビットマップファイル)
というふうに実行するプログラムを作ったのですが、あるパソコンでは、
処理するビットマップを実行ファイルのアイコンにドラッグ&ドロップして実行することができます。
しかし、同じことをしても無反応のパソコンもあります。
一体何が違うのでしょうか?
ドラッグ&ドロップのほうが快適なので、できるようにしたいです。
0619618
2006/08/04(金) 22:45:16できないパソコンはXPのホームエディションです。
この違いでしょうか??
0620デフォルトの名無しさん
2006/08/04(金) 22:49:470621デフォルトの名無しさん
2006/08/04(金) 23:24:25ショートカットかそうでないか、渡すファイルの個数 などを見てみよう。
0622デフォルトの名無しさん
2006/08/04(金) 23:35:38お前の言うNETとは.NET Frameworkのことだろうが、
.NET FrameworkはMSが提唱したプログラムを動かす基盤的な環境のこと。
ランタイムやクラスライブラリの巨大な集合体と言ったところか。
C#で書いたプログラムや、.NET Frameworkの機能を使って書いたC++のプログラムは
ユーザが.NET Frameworkをインストールしてあるコンピュータでしか実行できない。
(逆に.NET FrameworkさえあればOSがWindowsでなくとも実行できると言うのが建前)
C#>C++>Cは正しくない。
それぞれ得意・不得意なことがあるから、どれが良いかは一概に決められない。
ただし俺に言わせれば、その3つの中では良くも悪くもC++が一番万能だ。
0623デフォルトの名無しさん
2006/08/04(金) 23:38:040624デフォルトの名無しさん
2006/08/04(金) 23:39:530625デフォルトの名無しさん
2006/08/05(土) 01:29:32scanfとかstrtokとか、クソ仕様なのが多杉なんですけど。
0626デフォルトの名無しさん
2006/08/05(土) 01:34:22でもどんな言語にも糞仕様は存在するもんさ
0627デフォルトの名無しさん
2006/08/05(土) 01:39:51とりあえずcreat,gets,sprintfとかあげとく。
0628デフォルトの名無しさん
2006/08/05(土) 01:53:59割り込みやマルチスレッドと相性悪いやらってことだろ
>scanf, strtok
0629デフォルトの名無しさん
2006/08/05(土) 01:56:360630デフォルトの名無しさん
2006/08/05(土) 03:38:380631デフォルトの名無しさん
2006/08/05(土) 06:55:540632デフォルトの名無しさん
2006/08/05(土) 08:38:25お前より頭いいやつが作った。これはガチ
0633デフォルトの名無しさん
2006/08/05(土) 09:06:19いまどき包丁を使ってる奴は馬鹿って事みたいな・・・
0634デフォルトの名無しさん
2006/08/05(土) 10:21:310635デフォルトの名無しさん
2006/08/05(土) 12:06:37これを直すにはどうすればいいのでしょうか?
すいませんがよろしくお願いします。
0636デフォルトの名無しさん
2006/08/05(土) 12:22:40<ostream.h>は現在のC++には存在しない。今は<ostream>だ。
<ddraw.h>はDirectX SDKをインストールしろ。
0638デフォルトの名無しさん
2006/08/05(土) 13:36:470639デフォルトの名無しさん
2006/08/05(土) 13:43:23>これが問題になる場合は strtok_r() を用いること。
0640デフォルトの名無しさん
2006/08/05(土) 13:48:000641デフォルトの名無しさん
2006/08/05(土) 14:18:36使い方間違えると危ない。
ま、それなりに便利だと思うけどね。
0642デフォルトの名無しさん
2006/08/05(土) 15:15:43現実世界でも居るだろ、「この壷は〜」とか「xxx様のいう事は正しい」とか「絵を買いませんか?」とか
0643デフォルトの名無しさん
2006/08/05(土) 16:50:590644デフォルトの名無しさん
2006/08/05(土) 17:21:16代用関数だって簡単に作れるけど、
sprintfは危険性高いし、sprintfからsnprintfを作れないし、自分で作ると複雑だし、
sprintfの仕様って欠陥じゃね?
0645デフォルトの名無しさん
2006/08/05(土) 17:24:02だから、大抵の環境ではサイズ指定できるものとか、
サイズを取得するだけの関数とか、そういうのが用意されている。
0646デフォルトの名無しさん
2006/08/05(土) 17:32:560647デフォルトの名無しさん
2006/08/05(土) 20:40:47824 名前: 仕様書無しさん [sage] 投稿日: 2006/08/04(金) 22:35:26
au W42CA とW42Hに恥ずかしいバグ
ttp://japanese.engadget.com/2006/08/04/au-w42ca-w42h/
0648デフォルトの名無しさん
2006/08/05(土) 20:56:100649デフォルトの名無しさん
2006/08/05(土) 22:01:25http://pc8.2ch.net/test/read.cgi/tech/1154695492/
0650デフォルトの名無しさん
2006/08/05(土) 22:46:400651デフォルトの名無しさん
2006/08/06(日) 01:31:250652デフォルトの名無しさん
2006/08/06(日) 04:02:0390年代の。
今Java少し学んでて次にC→C++と学びたいんだ。
古い物でも仕様の変更とかはありませんか?
0653デフォルトの名無しさん
2006/08/06(日) 04:03:52良書を読め。
書籍スレを見ること
0654デフォルトの名無しさん
2006/08/06(日) 04:12:35今書籍スレ覗いてるところ。
ブックオフで250円とかで投売りだったから
使えそうなら買おうと思ってたんだよね。
現時点では基礎くらいわかるようになればいいので。
使うかもわからないし仕事はじめて必要になったら
楽に身に付けれるように基礎を押さえるだけでいいかなって。
0655デフォルトの名無しさん
2006/08/06(日) 05:35:51あんまり言語関係ないですけれど。
例えばWindowsのアプリケーションがMacで動かないのは
極論すればAPIが違うからと理解して良いですか?
そして、JAVAがプラットフォームに依存しないのは、
全てのOSで共通したAPIを提供しているからですか?
0656デフォルトの名無しさん
2006/08/06(日) 06:40:54JavaはVMで動作している
0657デフォルトの名無しさん
2006/08/06(日) 06:49:55言語関係ないなら、こっちかな。
すれ立てるまでもない質問はここで 第77刷
http://pc8.2ch.net/test/read.cgi/tech/1152856899/
>>656
つIntel Mac
0658デフォルトの名無しさん
2006/08/06(日) 19:45:19と
Sample* pSample = new Sample;
の違いって何?
0659デフォルトの名無しさん
2006/08/06(日) 19:53:09Sample が POD 型であるとき、前者は一通り値が初期化される。
後者は初期化されない。 Sample が POD でなければ同じ。
0660659
2006/08/06(日) 20:02:41ごめん。これ嘘。
Sample が POD 型じゃなくても、明示的に宣言したコンストラクタが
無い場合は前者は一通り値が初期化される。後者は暗黙に定義される
コンストラクタが実行される。後者の場合、メンバに POD と非 POD が
混ざってると POD は初期化されない。
ややこしいんで、いちおう規格の関連箇所は 5.3.4.15 と 8.5.5 ね。
0661デフォルトの名無しさん
2006/08/06(日) 20:05:330662デフォルトの名無しさん
2006/08/06(日) 20:13:200663デフォルトの名無しさん
2006/08/06(日) 20:29:160664659
2006/08/06(日) 20:41:19ごめんよ。最初は >>659 ぐらいで終わるかと思ったんだ。
でも、 >>660 の内容まで続けて書いたら、自分でもうまく書けた気がしなかったんで
関連箇所を上げたんだ。怪しいと思ったらそっちを見てくれ。原文コピペは意味無いよね?
0665デフォルトの名無しさん
2006/08/06(日) 21:42:32Sampleにコンストラクタがあれば、どちらも省略時コンストラクタ(引数無しで呼べるコンストラクタ)を呼ぶ。(無ければエラー)
Sampleが組み込み型の場合、前者はゼロ初期化され、後者は不定(初期化されない)。
Sampleにコンストラクタが無い場合または配列型の場合、上記の規則を基底クラスとメンバまたは各要素に対して再帰的に適用する。
0666デフォルトの名無しさん
2006/08/06(日) 22:13:590667デフォルトの名無しさん
2006/08/06(日) 23:26:120668デフォルトの名無しさん
2006/08/06(日) 23:28:28質問させてください
strcpyを使おうとしたら、VS2005から「古いバージョン」だとワーニングが出ました
strcpyを使うことに問題はないと思うのですが
なぜ古いと警告がでるのでしょうか?
下記の画像をご参照ください
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1154874364731.jpg
0669デフォルトの名無しさん
2006/08/06(日) 23:33:21全部メッセージに出てる。嫁。
あと、次からは画像じゃなくてテキストのコピペを使え。
0670デフォルトの名無しさん
2006/08/06(日) 23:35:09ない。
C++に標準で用意されているクラスはstring関係と、stream関係と、STL関係だけ。
0671デフォルトの名無しさん
2006/08/06(日) 23:37:18日本語訳がタコだから。
0672デフォルトの名無しさん
2006/08/06(日) 23:38:47exception とか type_info とか locale とか全部無視か?
0673668
2006/08/06(日) 23:39:20すいませんでした
strcpy_sを使えってことですかね?
strcpyって一般的に今でも使われていると思ったんですが。
・・・。
0674デフォルトの名無しさん
2006/08/06(日) 23:40:09全部メッセージに出てる。嫁。
0675デフォルトの名無しさん
2006/08/06(日) 23:40:53全部メッセージに出てる。嫁。
0676デフォルトの名無しさん
2006/08/06(日) 23:41:21使われてる。むしろ可搬性の低い_sなぞ窓から捨てろといいたいところだが
実際注意しないと安全じゃないのも確かなんだよなぁ。まあプログラマの技量しだいか。
0677デフォルトの名無しさん
2006/08/06(日) 23:41:510678668
2006/08/06(日) 23:43:55strcpyを普通に使いたいなと思っただけです。
0679668
2006/08/06(日) 23:46:07http://wind-master.dip.jp/soft-info/item/61
いろいろ調べてみます
ありがとうございました
0680668
2006/08/07(月) 00:11:16もう一点質問させてください
コンストラクタがないと言われるのですが
コンストラクタは定義されているんです。
なぜ無いと言われるのでしょうか?
error C2512: 'std::basic_ostream<_Elem,_Traits>' : クラス、構造体、共用体に既定のコンストラクタがありません。
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
class debuglog : public ostream
{
public:
debuglog()
{
#ifdef DEBUG_MONO
mono.clear();
#endif
#ifdef DEBUG_FILE
if(!open_debug_file())
throw "error opening debug log";
#endif
}
0681デフォルトの名無しさん
2006/08/07(月) 00:16:480682デフォルトの名無しさん
2006/08/07(月) 00:20:36何度も言うが、エラーメッセージをよく読め。
エラーの対象となっているクラスは std::basic_ostream<_Elem,_Traits> だ。
そして、そこで言う「既定のコンストラクタ」とはデフォルトコンストラクタの糞訳だ。
つまり >>681
あとは継承した場合のコンストラクタの呼ばれ方を調べろ。
0683デフォルトの名無しさん
2006/08/07(月) 01:04:510684668
2006/08/07(月) 01:06:130685デフォルトの名無しさん
2006/08/07(月) 19:22:55で読み込むと文字化けします。
どうやらtest.txtがUTF-8な様子。
これをちゃんとUTF-8として読み込むにはどうしたら良いでしょうか?
0686デフォルトの名無しさん
2006/08/07(月) 19:26:51fopen()/fclose()には関係なし。
0687デフォルトの名無しさん
2006/08/07(月) 19:31:110688デフォルトの名無しさん
2006/08/07(月) 19:32:23windows前提で答えてしまった。環境は書いてないね。
0689デフォルトの名無しさん
2006/08/07(月) 19:34:330690デフォルトの名無しさん
2006/08/07(月) 21:34:50VC++6.0で動作する、全く別物のプログラムA,Bがあるとします。
そのA,Bを合体させたい(A上でボタンを押すことでBを呼び出して実行させたい)のですが、
何か方法は無いでしょうか。
環境はVC++6.0で、プログラムは初心者です。
よろしくお願いします。
0691デフォルトの名無しさん
2006/08/07(月) 21:44:330692デフォルトの名無しさん
2006/08/07(月) 21:56:12CreateProcess()
0693デフォルトの名無しさん
2006/08/07(月) 22:06:01お前アホすぎ
0694デフォルトの名無しさん
2006/08/08(火) 03:35:140695デフォルトの名無しさん
2006/08/08(火) 14:20:32int a[5] = {20, 33, 41, 3, 80};
のような配列があって、
int order[5];
にaの要素が大きい順の添字を入れたいのです。
どうすればよいでしょうか。
この例だと
order[5] = {5, 3, 2, 1, 4};
のようになります。
0696デフォルトの名無しさん
2006/08/08(火) 14:30:20てか添字は0から
0697695
2006/08/08(火) 14:32:23order[5] = {4, 2, 1, 0, 3};
こうでした。
どうすればいいのでしょうか。
0699デフォルトの名無しさん
2006/08/08(火) 14:42:530700695
2006/08/08(火) 15:29:04な、なんとかできました。
order[5] = {0, 1, 2, 3, 4};
と初期化をして、
a[]の値をソートしながら、一緒にorder[]もソートすることでできました。
ありがとうございます。
0701デフォルトの名無しさん
2006/08/08(火) 15:33:11でもaはソートしなくてもいいんだよ〜
0702デフォルトの名無しさん
2006/08/09(水) 00:40:50今はEclipseでJavaをかじってる程度。
コンパイラとか総合開発環境?でお勧めってあったら是非教えてください。
お願いします。
0703デフォルトの名無しさん
2006/08/09(水) 00:44:43つ[Cygwin]
0704デフォルトの名無しさん
2006/08/09(水) 00:47:48Linux丸ごと、まじお奨め
0705702
2006/08/09(水) 00:50:13Cygwinはコンパイラって入ってるの?
前使ってたけど使い難かった。
>>704
Vine3.2はVMwareで入ってる。
でも重い。
インスコディスク消えたからインスコできない。
確かにLinuxが環境としてはやりやすい。
0706デフォルトの名無しさん
2006/08/09(水) 00:51:130707デフォルトの名無しさん
2006/08/09(水) 00:52:44CはわからないんだけどgccはCのコンパイラ?
CygwinはEmacsとかViは使えないでしょ?
MeadowとCygwinでいいの?
0708デフォルトの名無しさん
2006/08/09(水) 00:57:25gccはCコンパイラ。(他言語のコンパイラでもあるが)
emacsもviも使える。
ちなみにgccは標準では入ってない。
0709デフォルトの名無しさん
2006/08/09(水) 00:58:06大抵のものはCygwinに揃っている。
標準でインストールされるかどうかはともかく、EmacsもViもきっとあるはず。
0711デフォルトの名無しさん
2006/08/09(水) 01:02:23xyaayxなり、meadowなりをつかった方がいいよ。
0712デフォルトの名無しさん
2006/08/09(水) 01:07:31>>711
xyzzy?
0713707
2006/08/09(水) 01:10:34meadowってemacsに近いけど少し違うよね?
Java作ってる時にTab押した時のインデントが気に食わなかった。
設定できるのかな?
>>712
とりあえずHP見てAll Installにしたから入ったと思う。
まだインスコ中だけど。
0714デフォルトの名無しさん
2006/08/09(水) 01:12:19想像を超える数のファイルがインストールされるから覚悟しておくようにw
0716デフォルトの名無しさん
2006/08/09(水) 01:30:52パス通したし作業フォルダもC:\Cにした。
lsもdirでも使えないぞ?
再起動してないからな?
それとも入れないといけないものでもあったのかな…。
0717デフォルトの名無しさん
2006/08/09(水) 01:32:49質問はCygwinスレでどうぞ。
0718デフォルトの名無しさん
2006/08/09(水) 01:33:040719デフォルトの名無しさん
2006/08/09(水) 02:26:49http://xxxxx.dyndns.tv/~nadesiko/up/upload.php
ここにアップしたVC++6.0で作成してあるプログラムを、
どうしてもコマンドプロンプトで実行したいのですが
よくわからないエラーが出て実行出来ません。
このプログラムは、引数としてdata1、data2というファイルが必要なのですが
それが関係しているのでしょうか・・・。
少しスレ違いかもしれませんが、
宜しければどなたかアドバイスを下さらないでしょうか。
0720719
2006/08/09(水) 02:46:00上のアドレスのupupup5164.zipです。
コメントにも分かり易く書いておきました。
重ね重ね、宜しくお願いします。
0721デフォルトの名無しさん
2006/08/09(水) 04:19:40せっかくEclipse持っているのになぜそれを使わないんだ。
C/C++プラグインあるぞ。
0722デフォルトの名無しさん
2006/08/09(水) 13:26:14~~~~~~~ ←この部分に関する質問です
argv[1]に文字列を追加した場合、領域破壊が発生しますか?
0723デフォルトの名無しさん
2006/08/09(水) 13:28:590724デフォルトの名無しさん
2006/08/09(水) 14:06:450725デフォルトの名無しさん
2006/08/09(水) 14:21:37あれば教えてください。
0726デフォルトの名無しさん
2006/08/09(水) 15:51:00<windows.h>をインクルードせずに、
コマンドラインオンリーのプログラムで、
新しいフォルダ若しくはディレクトリを
作るのは無理なのですか?
出力ファイルが大量に出来るプログラムを作っておりますが
出力ファイルを一定数ごとに新たなフォルダに分けて出力したいと思い
質問した次第です
ファイル名をディレクトリ名のようにしてみましたが、上手く動きませんでした
0727デフォルトの名無しさん
2006/08/09(水) 16:08:16system("command /c hoge");
hogeには当然作りたいディレクトリの名前かパス。
0728デフォルトの名無しさん
2006/08/09(水) 16:09:20system("command /c md hoge");
0729デフォルトの名無しさん
2006/08/09(水) 18:01:53mkdir
0730デフォルトの名無しさん
2006/08/09(水) 18:48:03それ非標準だから先頭にアンダーバーが付いてないかい
0731デフォルトの名無しさん
2006/08/09(水) 19:14:010732デフォルトの名無しさん
2006/08/09(水) 19:17:56それを手がかりにやってみます
0733デフォルトの名無しさん
2006/08/09(水) 21:34:54ANSI C標準じゃないけどWindows環境やPOSIX環境だとライブラリに含まれてる。POSIXだとモード指定の引数が追加されてるけど。
0734デフォルトの名無しさん
2006/08/09(水) 22:11:020735デフォルトの名無しさん
2006/08/09(水) 22:54:51可愛そうに。DelphiかBCBでも使うべきだな。C#でもイイ
0736デフォルトの名無しさん
2006/08/09(水) 22:56:040737デフォルトの名無しさん
2006/08/09(水) 23:02:500738デフォルトの名無しさん
2006/08/09(水) 23:03:430739デフォルトの名無しさん
2006/08/10(木) 01:52:000740デフォルトの名無しさん
2006/08/10(木) 16:16:19visualc++2005 Expressを落としてform系のサンプル見てみたんですけど
リテラルって L"label1"とか書かないといけないんでしょうか。。。
0741デフォルトの名無しさん
2006/08/10(木) 16:23:46Unicodeなら、プレフィクスのLをつける。
0742デフォルトの名無しさん
2006/08/10(木) 16:38:22おお、素早いレスありがとうございます
ということは、無理に付けなくても大丈夫な感じでしょうか。
なんか謎です。
0743デフォルトの名無しさん
2006/08/10(木) 17:03:29つけない場合は、マルチバイト文字になる(シフトJISもこれ)
NTはネイティブでUnicodeなので(マルチバイト文字は、Unicodeに変換されてAPIに渡される)
もうそろそろいい加減にUnicodeにしろや、というMSの意向かな。
VS2005のIDEでは、デフォルトでUnicodeだし。
Win32 APIを学ばないと、この辺はあまり実感できないと思うけど。
Cでいえば、たとえばprintf()に文字列リテラルを渡す場合は、Lをつけてはいけない。
printf()はchar const *型を引数に取るから。
Lをつけた文字列(Unicode)を渡したい場合は、wprintf()を使う。
0744デフォルトの名無しさん
2006/08/10(木) 17:06:490745デフォルトの名無しさん
2006/08/10(木) 22:54:04もしかしてC++/CLI (CLRアプリケーションなど)使っている?
System::Stringは文字列をUnicodeとして保持しているから、それに対してはL付ける派が多い。
しかし文字列リテラルの場合は、コンパイラが面倒を見てSystem::String型のリテラルにするので、
Lの有無はどちらでも良くなっている。
0746デフォルトの名無しさん
2006/08/10(木) 22:58:33C++/CLIで使おうとしたらレガシーだって怒られた。
0747デフォルトの名無しさん
2006/08/10(木) 23:18:200748デフォルトの名無しさん
2006/08/11(金) 00:01:590749デフォルトの名無しさん
2006/08/11(金) 07:36:26exe名がタスクバーのボタン名になってしまいました。
Officeとかは、Microsoft Office Excelとか表示されているから
なにか方法があるとおもうんですが、やり方のヒントもらえませんか。
「hoge.exe」から、「美しいウインドウ1」、「美しいウインドウ2」、「美しいウインドウ3」、
と開いていくと、「美しいウインドウ4」、をあけたときにグループ化されて「hoge」になってしまうっす。
0750デフォルトの名無しさん
2006/08/11(金) 10:34:27レス遅れてすいませんでした。いろいろな場合があるんですね。
勉強になります。ありがとうございました。
0751デフォルトの名無しさん
2006/08/11(金) 17:30:32関数の戻り値を表示させるには、どうしたらよいですか?
0752デフォルトの名無しさん
2006/08/11(金) 17:46:240753デフォルトの名無しさん
2006/08/11(金) 19:20:420754デフォルトの名無しさん
2006/08/11(金) 19:26:200755デフォルトの名無しさん
2006/08/11(金) 19:32:14本を読みながら勉強してたら
if ((s->stk = calloc(max, sizeof(int))) == NULL)
本に書かれていた通り↑のように書いたところ
>'void *' 型は 'int *' 型に変換できない
という警告が出ました。
if ((s->stk = (int*)calloc(max, sizeof(int))) == NULL)
で、このように書いたら正常にコンパイルできたのですが、
これは本のミスなのでしょうか?
0756デフォルトの名無しさん
2006/08/11(金) 19:35:51コンパイラは?
0757デフォルトの名無しさん
2006/08/11(金) 19:37:40スーパーハッカーの方法を教えて九台!
0758デフォルトの名無しさん
2006/08/11(金) 19:42:21borland C++です。
0759デフォルトの名無しさん
2006/08/11(金) 19:44:57ちょー簡単ならいぶらりあったんじゃねーかl−−ああpさ
なんで教えてくれなかったんだよ!!
初心者C++講座;あ;あ;あ;あ;;あ;あ;あ;!!
0760デフォルトの名無しさん
2006/08/11(金) 19:56:23横からだけど
void*型とint* 型が暗黙的にキャストされるのは危ないから普通はエラーになるよ。
0761デフォルトの名無しさん
2006/08/11(金) 20:04:39Cではvoid*から他のポインタに暗黙キャストが言語仕様としてあるから、本のミスではない。
C++としてコンパイルしたアナタのミス
0762デフォルトの名無しさん
2006/08/11(金) 20:10:46現在CTaskというクラス、またはそれを継承したクラスでリスト構造を作りたく、
クラスのメンバ変数に
static std::list<CTask*> LTask と
static std::list<CTask*>::iterator itr を宣言しています。
これを初期化しないといけないので
std::list<CTask*>::iterator CTask::itr = LTask.begin();
としてもリンク時にエラーが出てしまいます。
書き方が間違っテいるのでしょうか。
エラーは、
CTask.obj : error LNK2001: 外部シンボル
""public: static class std::list<class CTask *,class std::allocator<class CTask *> > CTask::LTask" (?LTask@CTask@@2V?$list@PAVCTask@@V?$allocator@PAVCTask@@@std@@@std@@A)" は未解決です。
libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。
Debug/007_Direct3D最小コード.exe : fatal error LNK1120: 外部参照 2 が未解決です。
と出ています。
VC++ 2005EEを使っています。
どうかご教授いただけると嬉しいです。
0763デフォルトの名無しさん
2006/08/11(金) 20:11:56なるほど、やっと悪いところが把握できました><
HC_Editorというエディタで作成したらダメで、
winのメモ帳で作成したらOKだったので何がいけないんだろうと思ったら、HC_Editorで新規作成すると自動的にcppでファイルが作られてたのがいけなかったのか。
c++はcでできること全部できると思ってたからそのまま気にしないでやってましたorz
本当にありがとうございました><
0764デフォルトの名無しさん
2006/08/11(金) 20:43:35再現する最小限のコードを書いてみ
0765デフォルトの名無しさん
2006/08/11(金) 20:53:26ヘッダファイルでは
static std::list<CTask*>::iterator itr;
と宣言するだけにし、実装ファイルで
std::list<CTask*>::iterator CTask::itr = LTask.begin();
と書く
0766デフォルトの名無しさん
2006/08/11(金) 21:07:120767デフォルトの名無しさん
2006/08/11(金) 21:31:51CTask.h-------------------------------------
static std::list<CTask*> LTask;
static std::list<CTask*>::iterator itr;
以下メソッドなど。
--------------------------------------------
CTask.cpp-----------------------------------
#include <list>
#include "CTask.h"
std::list<CTask*> CTask::LTask.clear();
std::list<CTask*>::iterator CTask::itr = LTask.begin();
以下メソッドなど。
--------------------------------------------
こんな感じになっています。
>>765さんの言うとおり、ヘッダとソースはそのようにしているのですが・・・
>>766さん
LTaskの初期化も必要なのですか。
初期化の仕方(書き方?)が分からないのでCTask.cppに
std::list<CTask*> CTask::LTask.clear();
とは書いているのですが、間違っているようです・・・
LTaskはCTask*型のリストなのですが、実装とは何なのでしょうか。
0768デフォルトの名無しさん
2006/08/11(金) 21:52:48結構な人が知らずに車輪の再発明みたいなことしてると思うw
これ以上後悔しない為にも
STLとついでにBoostについてググっておくのを薦める。
0769デフォルトの名無しさん
2006/08/11(金) 22:07:290770デフォルトの名無しさん
2006/08/11(金) 23:38:17リンクエラーどころかそのコードではコンパイルは通らない
CTask.hの内容が
class CTask
{
static std::list<CTask*> LTask;
static std::list<CTask*>::iterator itr;
};
であると予想してCTask.cppを
-std::list<CTask*> CTask::LTask.clear();
+std::list<CTask*> CTask::LTask;
と変更
これが766が書いているLTaskの実装ね
0771767
2006/08/11(金) 23:51:56どうにかリンカまで通ることが出来ました。
LTaskの実装だけでイテレータの初期化が入らなかったとは orz
本当にありがとうございました。
もっと勉強してきます。
0772767
2006/08/12(土) 00:10:39>>765さんはstd::list<CTask*>::iterator CTask::itr = LTask.begin(); と書く
とおっしゃっていますので、イテレータの初期化もちゃんと書くと、やはりリンカでエラーが出るようになりました。
libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。
Debug/007_Direct3D最小コード.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と、このような風にです。
イテレータの初期化を書かなければコンパイルもリンクもきちんと出来ているようですが、
やはりイテレータが使えないと意味がないですよね。
一歩進んで半歩下がった感じでしょうか・・・
0773デフォルトの名無しさん
2006/08/12(土) 00:12:25これは「 LTask の定義」と言うのが正しい。
実装ってのは関数の場合に定義の中の {} の部分を指して使うもんだと思う。
0774デフォルトの名無しさん
2006/08/12(土) 00:19:23これでどう?
http://www.google.co.jp/search?q=LNK2019+%5F%5FCrtDbgReportW
0775デフォルトの名無しさん
2006/08/12(土) 18:55:50ttp://www.plustarnet.com/aspil/Programming/Skeleton.htm
このページにあるスケルトンプログラムをビルドしてみたんですが
かなりたくさんエラーが出てしまいました。↓
ttp://tool-ya.ddo.jp/webfs/~enigma/log.txt
どなたか対処法教えていただけないでしょうか?
0776デフォルトの名無しさん
2006/08/12(土) 21:21:01ヘルプでC2383を調べろよ
0777デフォルトの名無しさん
2006/08/12(土) 21:23:39http://www.google.co.jp/search?q=%E3%82%A8%E3%83%A9%E3%83%BC+C2383
0778デフォルトの名無しさん
2006/08/13(日) 00:55:34全くの初心者〜ってのと、それなりに勉強した奴が使うようなもの2冊ほど。
0779デフォルトの名無しさん
2006/08/13(日) 01:11:55まったくの初心者用
何冊も読んでみるといい。自分が知る限り、これ一冊でOKという万能本はない。
それなりに勉強した奴用
K&R
というかスレ違い
0780デフォルトの名無しさん
2006/08/13(日) 04:35:48%pで表示させてみた限り、int形などのポインタと大差ないように見えますが?
0781デフォルトの名無しさん
2006/08/13(日) 04:52:02int型変数の格納されたアドレスだろうが
関数の格納されたアドレスだろうが
見た目には見分けつきませんよ
複数のワードを占有するデータの場合、その先頭のワードのアドレスを指すだけでしょうから
0782デフォルトの名無しさん
2006/08/13(日) 04:58:43そりゃぁ、%pはポインタの持つ「アドレス」という属性を表示しているだけだからね。
ポインタの持つ「型」という属性はC++でtypeidでも使えば見ることができるよ。
0783772
2006/08/14(月) 00:36:55イテレータの初期化はいらないとどこかで見て(失念)、コメントアウトしています。
ここまではいいのですが、関数の中で、
void CTask::MoveTasks()
{
std::list<CTask*>::iterator itr = LTask.begin();
while(itr != LTask.end())
{
(*itr)->Move();
++itr;
}
}
とすると、
CTask.obj : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数
"public: class CTask * const & __thiscall std::list<class CTask *,class std::allocator<class CTask *> >::_Const_iterator<1>::operator*(void)const
" (??D?$_Const_iterator@$00@?$list@PAVCTask@@V?$allocator@PAVCTask@@@std@@@std@@QBEABQAVCTask@@XZ) で参照されました。
libcpmtd.lib(stdthrow.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
Debug/007_Direct3D最小コード.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と出て困っています。
ちなみにリリースモードではこのエラーは出ません。
少し調べた結果 "__CrtDbgReport" というのが "libcmtd.lib" のリンクに失敗しているのではと考え、
#ifdef _DEBUG
#pragma comment(lib, "libcmtd.lib")
#endif
という風に一時しのぎをしているのですが、これでは根本的な解決になってない気がして気持ち悪いです。
どのようにしたらこのエラーは出なくなるのでしょうか?
何度も質問申し訳ないです orz
0784デフォルトの名無しさん
2006/08/14(月) 00:40:060785デフォルトの名無しさん
2006/08/14(月) 00:43:30char型へキャストするだけ。
0786デフォルトの名無しさん
2006/08/14(月) 01:01:44できました!ありがとうございます!!
0787デフォルトの名無しさん
2006/08/14(月) 09:58:51Win32API質問箱できいてみます。読んでくれた人、ありがとう。
0788デフォルトの名無しさん
2006/08/14(月) 14:23:370789デフォルトの名無しさん
2006/08/14(月) 14:37:430790デフォルトの名無しさん
2006/08/14(月) 14:55:19ごめんなさい、strtok自体C++でも使えるんですよね?
VS2005のHELPを検索したら出てこなかったので、てっきりCだけの関数かと
思い込んでました。
0791デフォルトの名無しさん
2006/08/14(月) 16:00:31#ifndef POINT_H
#define POINT_H
class Point
{
...
};
#endif
(TwoPoint.h)
#ifndef TWOPOINT_H
#define TWOPOINT_H
#include"Point.h"
class TwoPoint : Public Point
{
...
};
#endif
というように、TwoPointのスーパークラスを別のファイルに書こうとしたんですが、
エラーがでます。(エラー文:定義されていない基本クラスが宣言されています。)
PointクラスとTwoPointクラスを一つのファイルにまとめて書けば問題は無いんですが、
別のファイルに分けて書く方法、もしくは上のソースで間違ってるところありませんか?
0792デフォルトの名無しさん
2006/08/14(月) 16:02:030793デフォルトの名無しさん
2006/08/14(月) 16:16:33すいません、大文字になってましたね。
でも、小文字にしても今のところ同じようにエラーが出ます。
0794デフォルトの名無しさん
2006/08/14(月) 16:20:290795デフォルトの名無しさん
2006/08/14(月) 16:22:190796デフォルトの名無しさん
2006/08/14(月) 16:48:46Cの関数は当然C++でも使える。
そして、一体どこを探したんだ?
http://msdn2.microsoft.com/ja-JP/library/2c8d19sb.aspx
0798デフォルトの名無しさん
2006/08/14(月) 17:15:450799デフォルトの名無しさん
2006/08/14(月) 17:46:46#include"Point.h"
の直前で
#undef POINT_H
で通るはず。あとはがんばって探す。
0800デフォルトの名無しさん
2006/08/14(月) 17:59:03サンクス、あれ?
MSDNにstrtokの解説っでてますね??
VS2005のVC8でコード書きながら、F1押してstrtok入力したら出てこなかったのに・・・・
途中、色々調べていたら、.NETではSplitなる関数も準備されていることも分かりました
いろんな方法でコーディングしてみます。
0802783
2006/08/14(月) 18:17:52プロジェクトのコード生成を、マルチスレッド(/MT)からマルチスレッドデバッグ(/MTd)に変更するだけだったんですね。
次の質問です、
staticなメンバ変数list LTaskを持っているクラスCTaskのnew演算子をオーバーロードしようと思うのですが、
他の例えばWinMain関数で
new CTask;
とすると、CTaskが自身で自身ををlist LTaskにpush_buck()する方法はありませんか?
0803デフォルトの名無しさん
2006/08/14(月) 18:31:530804デフォルトの名無しさん
2006/08/14(月) 18:35:220805デフォルトの名無しさん
2006/08/14(月) 18:38:480806デフォルトの名無しさん
2006/08/14(月) 18:43:210807デフォルトの名無しさん
2006/08/14(月) 18:46:23class Pointは読んでるぽいね
class TwoPoint : public Point
の前で
Point HagePoint;
してみると?
0808デフォルトの名無しさん
2006/08/14(月) 18:46:23コンストラクタでpush_backしろ。
0809デフォルトの名無しさん
2006/08/14(月) 18:48:28(Point.h)
#ifndef POINT_H
#define POINT_H
class Point {
};
#endif
(TwoPint.h)
#ifndef TWOPOINT_H
#define TWOPOINT_H
#include "Point.h"
class TwoPoint : public Point {
};
#endif
(main.cpp)
#include "TwoPoint.h"
int main(int argc, char *argv[]) {
TwoPoint tp;
return 0;
}
で何のエラーもでないぞ、ほかに別のヘッダインクルードしてるとかじゃね?
0810802
2006/08/14(月) 18:57:58コンストラクタで
LTask.push_back(this);
としてみました。
間違いありませんか?
時に、自分はまだ禿げてませんが、母方の父が禿げているので
20代後半からは頭皮の環境に気をつけたいと思います。
0811デフォルトの名無しさん
2006/08/14(月) 20:42:18structで定義した、こてこてのANSI Cを使うのは邪道ですか?
やはり、ref classで定義した書き方をするのが正道なのでしょうか
ケースバイケースなのでしょうが、漏れにはどっちも同じ様に感じてしまいます
概念的な質問になってしまいましたが、根本的な違いがよく分かりません。
教えてくださいエロイヒト
0812デフォルトの名無しさん
2006/08/14(月) 20:57:25そこをどっちでも好きなほうを選べるのが長所。
どっちにするか決めかねるのが短所。
コードが書きやすくなる方を使えばいいと思うよ。
あと、value structという手もあるよ。
0813デフォルトの名無しさん
2006/08/14(月) 21:04:23人間もいるので、>>801のソースに書き加えて、だんだんもとのソースに戻していくと
わかるかも。
0814デフォルトの名無しさん
2006/08/14(月) 21:04:540815デフォルトの名無しさん
2006/08/14(月) 21:07:250816デフォルトの名無しさん
2006/08/14(月) 21:14:30最近「改定 新 C言語入門 シニア編」を読終え、今まで曖昧だった構造体や
ポインタの使用方法が大体理解できました。また、日経BP出版の
「ひと目でわかる Microsoft Visual C++2005 アプリケーション開発入門」の
データとクラスを読み、それまで漠然としかイメージできなかったオブジェクト指向の
概念がリアルに理解できてきました、と同時に先程の>>811疑問が沸いてきた次第です
>>812さんの意見を踏まえ、使いまわしを考えれば、クラスを外部で定義した方に
一石の長があるような気がします。
0817デフォルトの名無しさん
2006/08/14(月) 21:19:59いれるべきだよなぁ。ifndef使うのは常識だけど、よく考えるとバッドノウハウ?
0818デフォルトの名無しさん
2006/08/14(月) 21:25:43言語仕様として入れるべきだと思う。
というか禿の言うとおり、プリプロセッサ嫌い。
0819デフォルトの名無しさん
2006/08/14(月) 21:41:13完全に分離して書ける様にしてほしいもんだ
0820デフォルトの名無しさん
2006/08/14(月) 21:45:09gcc -o sample sample.c
と打ってコンパイルして、sampleというファイルをつくったんですが
コマンドライン上で sample と打っても
sample:コマンドが見つかりません. と出て実行できません。
どこが悪いのかご教授お願いします。
0821デフォルトの名無しさん
2006/08/14(月) 21:46:22とかで動いたとかいったら、ぬっ殺す。
0822デフォルトの名無しさん
2006/08/14(月) 21:54:47とかで動きました^^;
ありがとうございました。そして殺さないでください><
0823デフォルトの名無しさん
2006/08/14(月) 23:23:16↓の行を実行しておけばsampleだけで動くよ。
export PATH=.
0824デフォルトの名無しさん
2006/08/14(月) 23:56:43その方法は色々問題があるから初心者にはおすすめしないけどね
0825デフォルトの名無しさん
2006/08/15(火) 08:50:262次元配列array2dに要素nx、nyを割り当てるとき
array2d.assign(nx, vector<double>(ny));
3次元配列array3dに要素nx、ny、nzを割り当てるとき
array3d.assign(nx, vector< vector<double> >(ny, nz);
というところまでは出来たのですが‥
4次元配列で同じことをやるにはどうしたら良いでしょうか?
array4d.assign(nx, vector< vector< vector<double> > >(ny,(nz,t)));
としても要素が割り当てられませんでした。
どうかご教授をお願いします。
0826デフォルトの名無しさん
2006/08/15(火) 09:07:45間違ってるじゃん。
3次元は
array3d.assign(nx, vector<vector<double> >(ny, vector<double>(nz)))
4次元は
array4d.assign(nx, vector<vector<vector<double> > >(ny, vector<vector<double> >(nz, vector<double>(t))))
0828デフォルトの名無しさん
2006/08/15(火) 12:05:57そもそも>823ではmakeさえ通らなくなるからただのネタだろ。
#lsできなくなると書こうとして、補完があるから必要ないと突っ込まれそうな気がしてやめた。
0829デフォルトの名無しさん
2006/08/15(火) 13:11:21一番目のデータはちゃんと読みますが、
二番目以降のtxtデータを開いてみると
一番目のデータのまま書き込まれてしまいます。
どこをどうなおせば良いでしょうか?お教えください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2604.txt
0830デフォルトの名無しさん
2006/08/15(火) 13:12:26特定のフォルダにファイルを出力する場合
どんな関数を使い、パスはどう書くべきなのですか?
fprintfではダメなので、あれこれ悩んでおりました
プログラムがあるのと同じフォルダ内に出力するのではなく、
フォルダ内に作った子フォルダに出力するのが
上手く行かずに困っております
0831デフォルトの名無しさん
2006/08/15(火) 13:17:10自分でデバッグしろよ
0832デフォルトの名無しさん
2006/08/15(火) 13:22:32標準にディレクトリやフォルダの概念は無いので、どんな関数を使うかは環境依存。
fprintfではダメな理由とは?
どう上手くいかないのか書かないと何も分からない。
0833デフォルトの名無しさん
2006/08/15(火) 13:27:12何回もやってみたのですが・・。
コンパイルはできるけど、
データがおかしくって。
0834デフォルトの名無しさん
2006/08/15(火) 13:29:08本当かよ
ステップ実行してnの値をみてみろ
0835デフォルトの名無しさん
2006/08/15(火) 13:32:45もしや、fopen("directory\file.dat", "w")なんて落ちか?
・fopen()はファイルを作るがディレクトリは作らない。
・バックスラッシュはエスケープしないとリテラルに使えない。
0836791
2006/08/15(火) 15:27:41どうやら、(Point.h)で、#include "TwoPoint.h"をしていたのが誤りだったようです。
(ここに書き込んだソースではしていませんでしたが)
>>809さんの「ほかに別のヘッダインクルードしてるとかじゃね?」が正しかったみたいです。
#includeは「とりあえず関係ありそうなものはなんでもしとけばいいや」みたいに思ってたので、
それが原因だったみたいです。
しょうもない理由で混乱させて申し訳ありませんでした。
でも、おかげ様ですごく助かりましたm(_ _)m
0837デフォルトの名無しさん
2006/08/15(火) 16:47:34インクルードはただのおまじないではないので、
それを書くことで、または、書かないことで、どういうことになるのか
考えながらコーディングする必要がある。
0838デフォルトの名無しさん
2006/08/15(火) 18:49:47ありがとうございます。
その方針で試して見ます
0839デフォルトの名無しさん
2006/08/15(火) 19:24:03ステップ実行
調べてやってみましたが、step入れたらコンパイル
それ自体がうまく行きません。
0840デフォルトの名無しさん
2006/08/15(火) 21:47:41> step入れたら
どこで調べたらこうなるんだ?
0841デフォルトの名無しさん
2006/08/15(火) 23:23:50で実行したプロセスから、spawnlpを実行したプロセスに
何かメッセージを送って、それを受信したいのですが、
どんな方法がありますか?
0842デフォルトの名無しさん
2006/08/15(火) 23:24:26皆さんが最初に自分で作ったクラスはどんなものだったでしょうか?
もしくは、実用的で入門向けのテーマを与えて頂けないでしょうか、
因みに会社ではVC8またはBCCで簡単なファイル処理のプログラムを書いています。
0843デフォルトの名無しさん
2006/08/15(火) 23:28:25この最初のvoidと()内のvoidがワケワカメなんだが、
誰か解説してくれない?
0844デフォルトの名無しさん
2006/08/15(火) 23:35:03パイプとか共有メモリとか。
0845デフォルトの名無しさん
2006/08/15(火) 23:36:03FILE* を private メンバに持ったファイルクラスでも作るといいんじゃない?
0846デフォルトの名無しさん
2006/08/15(火) 23:38:25最初の void は関数の戻り値の型。
括弧の中の void は引数を受け取らない関数として宣言するために必要。
0847デフォルトの名無しさん
2006/08/15(火) 23:40:42サンクスです、ファイル入出力のクラス化というイメージでしょうか?
もしそうならば、やってみます。
0848デフォルトの名無しさん
2006/08/15(火) 23:49:56ファイルのクラス化と考えるほうが自然だと思う。おぶじぇくとしこうってこういうこと?
0849デフォルトの名無しさん
2006/08/15(火) 23:49:56ちょっと調べてみます。
0850デフォルトの名無しさん
2006/08/15(火) 23:58:08すみませんが、もう少し具体的にファイルのクラス化とは何か説明して
頂けないでしょうか、与えられた仕事はこなせるのですが、
想像力に乏しいものでして・・・申し訳ござません_(--)_
0851デフォルトの名無しさん
2006/08/16(水) 00:13:06クラスになるのは「ファイル」。 class file; となって file input("path/to/file"); なんて使う。
そのクラスのメンバ関数になるのが「ファイル出入力」。 read() とか write() とかあって
input.read() とかして使う。そんなイメージ。
「ファイル出入力をクラス化」すると class file_read; class file_write; となるんだろうけど
不自然だと思うし、実際使いにくそう。
0852デフォルトの名無しさん
2006/08/16(水) 00:23:29コンストラクタでファイル名を引数に取り、そのファイルをfopen()して、*FILE型のメンバに代入する。
メンバ関数として、1文字読んで返す、1行読んで返す、改行文字の数を返すとか、オブジェクトに対して操作する関数を自由に作る。
デストラクタでfcloseする。
できあがり。
まあC++のifstreamのFileの車輪の再発明だが。
0853デフォルトの名無しさん
2006/08/16(水) 00:35:02ありがとう
なるほど、イメージが沸いてきました出来そうなものから作っていきます。
>>「ファイル出入力をクラス化」すると class file_read; class file_write; となるん
>>だろうけど
>>不自然だと思うし、実際使いにくそう。
確かにそうですね、入出力の関数がすでに用意されているのに、それを呼び出す関数を
作るのも確かにおかしいですね。
0854デフォルトの名無しさん
2006/08/16(水) 00:43:27>入出力の関数がすでに用意されているのに、それを呼び出す関数を
>作るのも確かにおかしいですね。
つ「ラッパークラス」
まあ、万人が使いそうなのは標準にもあったりするけども。
0855デフォルトの名無しさん
2006/08/16(水) 02:41:31設計の問題だが、個人的には入力と出力は別クラスにするべき。
(ファイル)入出力というインターフェイスをクラス化するイメージ。
0856デフォルトの名無しさん
2006/08/16(水) 02:46:41まぁその場合でもクラス化するのはファイルで出入力をメンバ関数にするのが自然だろ。
class readable_file; class writable_file; ってな。
0857デフォルトの名無しさん
2006/08/16(水) 02:57:57rとwをクラス名に使うのなら
file_reader file_writerとかかな。
0858デフォルトの名無しさん
2006/08/16(水) 04:27:130859デフォルトの名無しさん
2006/08/16(水) 07:05:010860791
2006/08/16(水) 07:30:20(Point.h)
class Point
{
private:
Point()
{
x = 100;
}
public:
int GetX(); //xの値を返す
};
(TwoPoint.h)
class TwoPoint : public Point { ...};
(TwoPoint.cpp)
x = Point::GetX();
(Main.cpp)
int main(int argc, char *argv[]) {
Point p;
TwoPoint tp;
p.時間経過でxが移動、pとtpを描画(); //ループ
return 0;
}
こんなコードで、Pointクラスのxが時間経過などで移動したとき、
TwoPointクラスのPoint::GetX():で、xの値がなぜか100(コンストラクタの時の値)になってしまいます。
最新のxの値をTwoPointクラスが受け取るにはどうすればいいんでしょう?
0861デフォルトの名無しさん
2006/08/16(水) 08:16:52まさか別のインスタンスを見ていると言うことはないだろうな。
0862デフォルトの名無しさん
2006/08/16(水) 08:32:45>(TwoPoint.cpp)
>x = Point::GetX();
なにこれ?
コンパイル可能な最低限のコードを貼れよ
省略過程で大体の場合は自ずと原因が分かるんだからさ
0863デフォルトの名無しさん
2006/08/16(水) 10:16:17クラスとインスタンス、及び継承について勉強しなおした方がいい。
そもそもPointとTwoPointをクラスにする必要があるのかとか、
x座標の情報のみで描画する関数をTwoPoint内に作ってしまえば
Pointはいらないんじゃないか(こうすれば問題も解決)とか、色々疑問が沸いてくる。
0864デフォルトの名無しさん
2006/08/16(水) 10:21:41今更だけど、初めてクラスを作るなら
動的配列やスタック、キューなんてどうかな?
STLで既にあるけど割と簡単に作れると思うよ。
0865デフォルトの名無しさん
2006/08/16(水) 11:06:10syslog.confに
test.* /var/log/test.log
って追加して再起動して、
openlog("test" , LOG_PID , LOG_NOTICE);
syslog(LOG_INFO , "test write");
ってしているのですが書き込まれません。
何か間違っているのでしょうか?
ご指摘お願いいたします。
0866デフォルトの名無しさん
2006/08/16(水) 11:24:10openlog()の第三引き数はそれで宜しいか? facilityの指定だったと思うのだが。
0867デフォルトの名無しさん
2006/08/16(水) 12:02:43{
char c[] = "piyo";
hoge = malloc(sizeof(char) * 5);
strcpy(hoge, c);
printf("%s\n", hoge);
}
int main(void)
{
char *c;
test(c);
printf("%s\n", c);
return 0;
}
↑で、関数testのprintfでは、ちゃんとpiyoが表示されるのに
mainのprintfでは表示されないのですが、どうしてでしょうか?
0868デフォルトの名無しさん
2006/08/16(水) 12:06:13{
i = 5;
}
int main(void)
{
int i;
test(i);
printf("%d\n", i);
return 0;
}
これと同じ事
0869デフォルトの名無しさん
2006/08/16(水) 12:22:40868さんが示してくれたのは良くわかっているつもりなのですが、
じゃあ何故↓は普通に表示されるのかが良くわからないのです。
void test(char **hoge)
{
int i;
for (i = 0; i < 3; i++)
hoge[i] = malloc(sizeof(char) * 5);
strcpy(hoge[0], "piyo");
strcpy(hoge[1], "hoge");
strcpy(hoge[2], "foo");
}
int main(void)
{
int i;
char *c[3];
test(c);
for (i = 0; i < 3; i++)
printf("%s\n", c[i]);
return 0;
}
0870デフォルトの名無しさん
2006/08/16(水) 12:28:57ヒント:mainのポインタを配列にしてみる
0871865
2006/08/16(水) 12:32:01てことは追加したtestのfacilityを指定しなきゃいけないってことですか?
型がintなのでどこかにtestのfacilityを定義しなきゃいけないってことですか?
0872デフォルトの名無しさん
2006/08/16(水) 12:45:09typedef char* CharPtr;
とすれば分かりやすくなるかな?
void test(CharPtr *hoge)
{
int i;
for (i = 0; i < 3; i++)
hoge[i] = malloc(sizeof(char) * 5);
strcpy(hoge[0], "piyo");
strcpy(hoge[1], "hoge");
strcpy(hoge[2], "foo");
}
int main(void)
{
int i;
CharPtr c[3];
test(c);
for (i = 0; i < 3; i++)
printf("%s\n", c[i]);
return 0;
}
0873867
2006/08/16(水) 13:00:51いまいち納得できないので、
皆様のレスを手掛りに自分でいろいろとやってみます。
ありがとうございました。
0874デフォルトの名無しさん
2006/08/16(水) 13:14:22マニュアルページを読め。
0875865
2006/08/16(水) 14:46:39manは読んだのですがよくわかりませんでした。
どうか教えてください。よろしくお願いします。
0876デフォルトの名無しさん
2006/08/16(水) 15:11:16マニュアルページ(http://www.linux.or.jp/JM/html/LDP_man-pages/man3/openlog.3.html)によると、
>facility 引き数は、後で syslog() を呼び出す際に facility が指定されなかった場合に使用されるデフォルト値を決定する。
とある。更にその先に、
>facility
>facility 引き数はメッセージに記録されるプログラムのタイプを指定するために使われる。これによって異なるタイプの
>プログラムからのメッセージは異なる扱いをするように設定ファイル( syslog.conf(5) )に定義できる。
とあるな。そして更に、
>LOG_USER (デフォルト)
>一般的なユーザレベルメッセージ
とあるわけだ。
どこからLOG_NOTICEが出て来たのかと思えばその先のlevelの項じゃないか。
この程度の日本語が判らないのなら、小学生位から遣り直した方がいいぞ。
0877デフォルトの名無しさん
2006/08/16(水) 15:27:09main関数中のtest(c)による呼び出しでvoid test(char *hoge)のhogeにcの値がコピーされる。
test関数の中でhogeの値が変更される。
main関数中のcの値が変更されるわけではない。
test関数から戻ってもcの値は変更されていない。
>>869
main関数中のtest(c)による呼び出しでvoid test(char **hoge)のhogeにcの値がコピーされる。
test関数の中でhoge[0]からhoge[2]の値が変更される。
main関数中のcの値が変更されるわけではないが、main関数中のc[0]からc[2]の値は変更される。
なぜなら、test関数の中hogeとmain関数中のcは同じ値なので、
hoge[0]を変更することはc[0]を変更することに等しい。インデックス1,2も同様。
test関数から戻ってもcの値は変更されていない。
しかし、c[0]からc[2]の値は変更されているので、test関数の中での操作が反映される。
0878デフォルトの名無しさん
2006/08/16(水) 16:13:200879865
2006/08/16(水) 16:13:47うーん、ちょっとわからないんですが、
syslog.confに
test.* /var/log/test.log
って追加して、アプリからtest.logにログが出力されるようにするにはどうすればいいんでしょうか?
0880デフォルトの名無しさん
2006/08/16(水) 18:35:59867じゃないが便乗して質問
>main関数中のtest(c)
この部分で、関数にポインタを渡してるんじゃないの?
0881デフォルトの名無しさん
2006/08/16(水) 18:49:25mallocで取得して値を代入したポインタ変数 hoge は別物
後者はコピーされたヤツ
これでおk?
0882デフォルトの名無しさん
2006/08/16(水) 19:32:25>後者はコピーされたヤツ
これがよくわからない。
hogeとcのアドレスは同じ
で、同じアドレスを指す変数のうちの片方の値を変更したら、もう片方も変更されてる(ように見える)
従って、hogeの値を変更したらcの値も変化する
どこが間違ってるの?
0883デフォルトの名無しさん
2006/08/16(水) 19:46:29test(c)でtestに制御が渡った時点で、
cの内容がhogeにコピーされてhogeの内容とcの内容が同じになるだけ。
だから、test中でhogeの内容を変更してもcの内容とは無関係になる。
0884デフォルトの名無しさん
2006/08/16(水) 19:56:28片方の変数の値を変えてももう一方の値が変わるわけではない
ポインタ変数の値とポインタ変数そのもののアドレスとを混同しないように
0885デフォルトの名無しさん
2006/08/16(水) 20:06:140886デフォルトの名無しさん
2006/08/16(水) 20:15:37自身の読解力のなさが情けない・・・
int *ptr; と宣言したとき、 &ptr が違う場合は ptr が同じであっても *ptr が違う可能性がある
ということですか?
0887デフォルトの名無しさん
2006/08/16(水) 20:17:440888デフォルトの名無しさん
2006/08/16(水) 20:21:12同じとか違うとかいうときは「何と何が」って言わないと駄目だろ。
日本語しっかりな。
0889デフォルトの名無しさん
2006/08/16(水) 20:34:13と宣言したとき
&ptr1!=&ptr2
であれば
ptr1==ptr2
であっても
*ptr1!=*ptr2
となる可能性がある、ということですか?
・・・すみません、C言語の前に日本語から勉強してきます λ...
0890デフォルトの名無しさん
2006/08/16(水) 20:35:19コピーしたメモを書き換えても元のメモの内容は変わらない。
0891デフォルトの名無しさん
2006/08/16(水) 20:40:44868とか877とか読むと値渡しの様に書かれているから ? と思っている次第。
0892デフォルトの名無しさん
2006/08/16(水) 20:43:56値渡しだよ。参照渡しなら
void test(char *&hoge)
となる。
0893デフォルトの名無しさん
2006/08/16(水) 20:45:20void test(char *hoge)のhogeにコピーされる
つまりこの時点でcとhogeのアドレスは同じ100となっているが指しているアドレスが同じなだけで実際には全く別の変数
だからtest関数でhoge=malloc(sizeof(char) * 5);(mallocで確保したメモリのアドレスを400とする)を実行すると
cの指しているアドレスは100のままだが
hogeはmallocで確保された400というメモリのアドレスが代入されるのでcとhogeの指すアドレスが変わる
だからこの状態でhogeの指す400番地の中身を変更してもcの指す100番地の値は変更されない
不自由な日本語で書いてみたけど
書いた後にこんなの理解できるわけがないということに気づいた
0894デフォルトの名無しさん
2006/08/16(水) 21:01:010895デフォルトの名無しさん
2006/08/16(水) 21:50:36↓
[c]→5
ここで、*hoge = 3 とすると・・・
[hoge]
↓
[c]→3
-------------------------------
上の図のように、*hoge を書き換えると、*c の値も変わる。
が、今回は、*hoge ではなく hoge の値を変更している。
-------------------------------
hoge = malloc (略 とすると・・・
[hoge]→□
[c]→5
*hoge = 3 とすると・・・
[hoge]→3
[c]→5
-------------------------------
*c の値は変わっていない。
0896デフォルトの名無しさん
2006/08/16(水) 22:32:400897デフォルトの名無しさん
2006/08/16(水) 22:37:12Sleep(500);
if(stat("a.txt", &st)==0)break;
}
こういうa.txtがあるかどうかをチェックし続けるプログラムは
HDDに負荷がかなりあるものなんですか?
0898デフォルトの名無しさん
2006/08/16(水) 22:40:24人手によるポーリングや OS からのイベントなどを使うのに比べたら
負荷が高いだろうね。
0899デフォルトの名無しさん
2006/08/16(水) 22:47:34やってみりゃわかる。
0900デフォルトの名無しさん
2006/08/17(木) 00:05:07メールデーモンからstdin経由で次のようなメッセージがわたってくるのですが、これをなんとかメモリ上に格納して
加工したいというのが趣旨です。一行の文字数がよくわからないので
行・列ともに動的にメモリを確保したいのですが、なかなかうまくいきません
入力値はこんな感じです。
可変の文字数(横)x 可変の行数(縦)
最初は一行の横の長さをfgetcで改行文字までの文字数をカウントして
同じ行を、その長さ分mallocしたポインタに格納してfgetsすればいいだろう・・と思ってたのですが、
fgetcする時点でstdinの現在位置が変わってしまうようで、続けてfgetsすると次の行をgetしてきてしまいます。
rewindとかfseekしてstdinの位置がファイルのように戻るかなと思ったのですがだめでした。
こういう場合は、リストで横と縦を作ったほうがいいのでしょうか?
#include <stdio.h>
#include <stdlib.h>
int main(){
int i = 0;
char ch;
char *line_p;
/* 一行の長さを数える */
while(ch = fgetc(stdin)){
i++;
if(ch == '\n'){
break;
}
printf("%c",ch);
}
printf("%i",i);
/* 一行の文字数をmallocで確保してその行をポインタの先に格納する。*/
line_p = malloc(i+1);
fgets(line_p,i+1,stdin);
printf("%s",line_p);
return (0);
}
0901デフォルトの名無しさん
2006/08/17(木) 00:09:10最初に malloc() したのより長くなったら realloc() などを使って
バッファを取り直せばいい。
0902デフォルトの名無しさん
2006/08/17(木) 00:20:3410
20
30
40
50
のようになっているファイルがあるとして
3行目の30を60に書き換えるにはどんな方法でやればいいんでしょうか?
書き込むことは出来たんですけど、5行全てが消えて60になってしまったりして
うまく出来ません
0903デフォルトの名無しさん
2006/08/17(木) 00:26:30簡単な方法
ファイルを1行ずつ読んで行って、30なら60を他のファイルに
一行書く。その他ならそのまま一行書く。
読んだファイルを削除して、書いた方のファイル名を変える。
0904デフォルトの名無しさん
2006/08/17(木) 01:04:52fgetsとfputsでやってみましたがうまく出来ません。
上の二つで問題ないでしょうか?
0905デフォルトの名無しさん
2006/08/17(木) 01:08:180906デフォルトの名無しさん
2006/08/17(木) 01:15:00FILE *f1;
FILE *f2;
if((fold = fopen("a.txt","w"))==NULL)return 0;
if((fnew = fopen("b.txt","w"))==NULL)return 0;
for(int i=0;i<4;i++)
{
fgets(buf,256,f1);
fputs(buf,f2);
}
fclose(f1);
fclose(f2);
こんな感じなんですけど、どうでしょうか
0907デフォルトの名無しさん
2006/08/17(木) 01:17:31で、なにがうまく出来なかったの?
一見しておかしいのは buf の宣言が見えないことと
fold のモードが "r" じゃないことぐらいかな。
0908デフォルトの名無しさん
2006/08/17(木) 01:20:46出来たファイルが・・・・・・・・
になってました。一応bufは前で宣言してあります
0909デフォルトの名無しさん
2006/08/17(木) 01:21:54fgets() と fputs() にもエラーチェック入れろよ。
fclose() は、微妙だけどうまく動かないんなら入れてみるのがいいだろう。
んでエラーが発生したら perror() とかするといいよ。
0910デフォルトの名無しさん
2006/08/17(木) 01:22:36分かりました やってみます
0911デフォルトの名無しさん
2006/08/17(木) 01:35:09読み込みのfclose()は事実上不要、書き出しのfclose()はfputs()と同様に。
#前者は安全にクローズするだけ、後者はバッファのフラッシュ(=実際の書き出し)が行なわれる。
0912デフォルトの名無しさん
2006/08/17(木) 01:45:29教えていただいてありがとうございました
0913デフォルトの名無しさん
2006/08/17(木) 23:04:16private :
int x;
public :
void show();
void change(Testclass *target);
Testclass(int a);
};
Testclass::Testclass(int a){
x = a;
}
void Testclass::change(Testclass *target){
target->x = 3;
}
int main(){
Testclass t1(1);
Testclass t2(2);
t1.change(&t2);
}
上記のコードがコンパイルできてt2.xが3になるんですが、
privateメンバーのt2.xがt1.change()から書き換えられる理由がわかりません。
クラスに属さない関数や他クラスのメンバ関数で同じ事するとコンパイルエラーだったんですが。
0914デフォルトの名無しさん
2006/08/17(木) 23:06:00クラスに属した関数で、同クラスのメンバ関数だから。
0915デフォルトの名無しさん
2006/08/17(木) 23:13:02……こう書くとなんだかアレな内容に聞こえる。
0916デフォルトの名無しさん
2006/08/17(木) 23:22:10b o;
この記述は何を意味するのでしょうか?
class a1
{
public:
void foo()
{
System::Console::WriteLine("a1.foo");
}
};
class a2
{
public:
void bar()
{
System::Console::WriteLine("a2.bar");
}
};
class b : public a1, public a2
{
};
int main(array<System::String ^> ^args)
{
b o;
o.foo();
o.bar();
return 0;
}
0917913
2006/08/17(木) 23:23:49「そういう仕様だから」で済むような話だったんですね。すいませんでした。
0918デフォルトの名無しさん
2006/08/17(木) 23:26:24class b 型の変数 o の定義。
0919デフォルトの名無しさん
2006/08/17(木) 23:45:02oはclass b 型のインスタンス(実態)と解釈してもいいですよね?
0920デフォルトの名無しさん
2006/08/17(木) 23:47:460921デフォルトの名無しさん
2006/08/17(木) 23:57:12実体だよな?
という突っ込みは置いといて、インスタンスはふつーインスタンスと言うからな。
0922デフォルトの名無しさん
2006/08/18(金) 12:31:12> int main(array<System::String ^> ^args)
これ、ほんとにC/C++か?
0923デフォルトの名無しさん
2006/08/18(金) 12:35:470924デフォルトの名無しさん
2006/08/18(金) 13:20:040925デフォルトの名無しさん
2006/08/18(金) 14:07:04強制はしないけど、C++とC#(かVB)を理解してからC++/CLIに手を出したほうがいいと思うよ。
0926デフォルトの名無しさん
2006/08/18(金) 14:24:26C# Javaプログラマ、初心者向け
VB.NET VBプログラマ向け
J#、J++ うんこ
0927デフォルトの名無しさん
2006/08/18(金) 17:57:05VC++のプロジェクトを作るときに、Win32コンソールプロジェクトを選ばなかった(知らなかった)だけ
ということかもしれないと思う。
0928デフォルトの名無しさん
2006/08/19(土) 02:52:40いや、わかんないけど。
0929デフォルトの名無しさん
2006/08/19(土) 19:59:27C言語で
float a;
a=5.0/4.0;
と
float a;
a=5/4;
に差があると聞いたのですが、理由が分かりません
どなたか教えてください
0930デフォルトの名無しさん
2006/08/19(土) 20:06:075.0 や 4.0 の型は double 。 double/double の型は double 。なので
5.0/4.0 は小数点以下も double の精度で結果が得られる。
つまり a = (float)1.25 になる。
5 や 4 の型は int 。 int/int の型は int 。なので
5/4 は結果の小数点以下が切り捨てられて 1 になる。
つまり a = (float)1 になる。
0931929
2006/08/19(土) 20:48:22返答有難う御座いました
intが整数型なのは分かるのですが、doubleとfloatの違いが分かりません
そこも教えていただけますでしょうか?
0932デフォルトの名無しさん
2006/08/19(土) 20:55:220933916
2006/08/20(日) 07:09:25実は只今、Native C++も正確に理解できてないのにC++/CLIの勉強を始めてしまいました
今読んでいる本が、C++、C++マネージ拡張、C++/CLIのソースを対比させながら、
書いてあるのでこんなサンプルが載っていました、
>925の指摘通り
変更前
o.foo();
o.bar();
変更後
((a1*)&o)->foo();
((a2*)&o)->foo();
このように、a2クラスのbarメソッドをfooメソッドに名前を変更したとたんバッティングが
生じることも確認しました。やはり、C++をしっかり習得してから向かった方が身に付くし
C++/CLIも結果早く習得できるんでしょうね、C++お勧めの本がありましたら教えてください。
0934デフォルトの名無しさん
2006/08/20(日) 11:19:03C/C++の文献等で、キャストという言葉がよく使われますが
「変換」と理解したらいいでしょうか?
0935デフォルトの名無しさん
2006/08/20(日) 11:38:00変換だけだと、ちょっと意味が会わない。
プログラマが(自らの責任で)明示的に指定する変換と覚えておくといい。
0936デフォルトの名無しさん
2006/08/20(日) 12:16:09英語では、implicit type conversionのことは、普通coercionと言う。(implicit castという人もいる)
0937デフォルトの名無しさん
2006/08/20(日) 12:29:43>>935
サンクス、
だからcastを直訳してもそれらしき意味ではなかったんだ、納得シマスタ。
0938デフォルトの名無しさん
2006/08/20(日) 15:37:42ある型から狙って別の型に変換するという感じ。
0939デフォルトの名無しさん
2006/08/20(日) 15:38:22×cast を
○cast は
0940デフォルトの名無しさん
2006/08/20(日) 15:50:35そりゃ無茶だ。元は「鋳造」の意味からきてるんだろう。
0941デフォルトの名無しさん
2006/08/20(日) 15:59:350942デフォルトの名無しさん
2006/08/20(日) 16:14:510943デフォルトの名無しさん
2006/08/20(日) 16:24:58どうみても簡易辞書を引いて出てきた訳をこじつけただけだろ。
覚え方として使えんわけではないが、人に教えるのは恥ずかしいことだ。
0944デフォルトの名無しさん
2006/08/20(日) 16:29:391.a <物>を投げる、ほうる(throw)
つまり、キャストとスローは同じ意味だ!!!
0945デフォルトの名無しさん
2006/08/20(日) 16:38:09ある単語の意味ってのは連想で広がって行くもので、
複数意味があるように見えても、根っこは同じなのが普通だ。
全く関連性のない意味が1つの単語に押し込められてるっつー事態の方が
異常な事だとは思わないか?
0946デフォルトの名無しさん
2006/08/20(日) 16:49:410947デフォルトの名無しさん
2006/08/20(日) 16:55:04cast も根っこは同じなんだろう。なんにせよ >>938 を正当化することにはならん。
0948デフォルトの名無しさん
2006/08/20(日) 17:35:240949デフォルトの名無しさん
2006/08/20(日) 18:18:01投げてないから桶だよな?
0950デフォルトの名無しさん
2006/08/20(日) 19:06:00それが通じる限り基本的に言葉は日本語訳されたものを使いたいので。
0951デフォルトの名無しさん
2006/08/20(日) 20:58:11しかし文脈によっては暗黙の型変換と紛らわしいからなぁ。型適用とでも言うか?
自分はC++者なんで最初からスタティックキャスト、コンストキャストと言うけど。
0952デフォルトの名無しさん
2006/08/20(日) 21:20:47と同じような感じだと思いますが、
cin.getlineの戻り値でどういう時がエラー
とかありましたら教えてください。
0953デフォルトの名無しさん
2006/08/20(日) 21:50:53一応交互にゲームは出来るんですが、すでに石を置いてあるところにも置けてしまうし、
ひっくり返せないところに置くこともできてしまいます。
上のような場合はwhileかdoで繰り返したら出来るかなと思ってやってるんですがなかなかうまく出来ません。
もしここに汚いソースですが載せたらご教示いただけますか?
0954デフォルトの名無しさん
2006/08/20(日) 21:51:02cast の最も基本的な意味は計算して投げるって意味なんだから、
他の意味はそこからの派生と考えるのが自然だろ。
そこまで違うと言うからには、何か根拠でもあるのか?
0955デフォルトの名無しさん
2006/08/20(日) 21:53:500956デフォルトの名無しさん
2006/08/20(日) 22:18:40難しいだろうね。一通りうごくんならソースもそれなりの量だろうし。見るのは面倒。
スレにだらだらソース貼るのは超迷惑。
ソースをアップローダに置いて、リンク貼るだけならあんまり迷惑じゃないし、
やってみてもいいんじゃないかな。ただし、返答が無くてもあたりまえなんだから、
文句は言わないこと。あと、汚いと自覚してるんだったら、礼儀として
すぐ出来る整形ぐらいはしとくことだ。多少は見てもらえる可能性が上がるだろう。
0957デフォルトの名無しさん
2006/08/20(日) 22:26:10iostream のエラーはストリームオブジェクトの中に記録されている。
で、 good() とか fail() とか、いろいろテスト方法がある。
cin.getline() の戻り値は istream& だから。そいつらを使う。
0958デフォルトの名無しさん
2006/08/20(日) 22:30:20出来るだけ綺麗にしました。
わかる方よろしくお願いします。
0960デフォルトの名無しさん
2006/08/20(日) 22:35:05分かりました。ありがとうございました。
0961デフォルトの名無しさん
2006/08/20(日) 22:50:54入力を受け付ける前に、全64マスの評価(石を置いた場合、いくつ取れるかを計算)して、評価値が0のマスが指定されたら再入力
…とかかな。
で、その評価値は後でCPU思考につかう。
というか、コードそのものよりアルゴリズムが汚い。
0962デフォルトの名無しさん
2006/08/20(日) 23:00:05hantei() という関数が画面出力を受け持ってるのは信じがたい。
hantei2() は書き直し。 struct vec { int x, y } vectors[8] = {-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},...
てのをくるくるすれば8種類書かなくていいでしょ。
すでに石があるとこに置けるとか置けないとかはうpされたソースからはわからん。
0963デフォルトの名無しさん
2006/08/20(日) 23:06:09と書いたが、これで全ソースなんだったら言い直す。hantei2()が読む気しないのでわからん。
0964デフォルトの名無しさん
2006/08/20(日) 23:12:290965デフォルトの名無しさん
2006/08/20(日) 23:19:44俺も読む気になれなかった。
0966デフォルトの名無しさん
2006/08/20(日) 23:33:42俺書き込んだっけ?
0967デフォルトの名無しさん
2006/08/20(日) 23:36:24cin.getlineとは反対に1行出力できるのはないでしょうか。
0968デフォルトの名無しさん
2006/08/20(日) 23:38:250969デフォルトの名無しさん
2006/08/20(日) 23:40:340970953
2006/08/20(日) 23:52:56hantei2は石を置いてその石(黒)から上下右・・右下、左下と順番に見て行ってもし
間にひっくり返せる石があったら色を白にするというものを黒石用と白石用で分けているだけです。
あとこれで全ソースです。
0971デフォルトの名無しさん
2006/08/20(日) 23:58:56宿題とかでなく、自主的にオセロ作ってるのならおまえには見込みがある。
ソースはむちゃくちゃだがな。
0972デフォルトの名無しさん
2006/08/21(月) 00:01:090973953
2006/08/21(月) 00:04:36昨日から作っているんですが、なかなかうまく行かないものなんですね・・・
まだまだ私の知らない表現方法がある見たいですし>>961さんが仰る方法で作れるような気もしますが、
もうちょっと汎用性に優れたのを作って見ます。
宿題ではないんでゆっくり頑張ります。
他にもご指摘ありましたら是非ご教示下さい。お願いします。
0974デフォルトの名無しさん
2006/08/21(月) 00:10:14【初心者歓迎】 ソース見れば初心者は明らか。
初心者がなにかやろうと思ってとにもかくにもあそこまで書いたなら素質はじゅうぶんだと思うね。
0975967
2006/08/21(月) 00:15:09>>968
コンパイラはbccですが、
putsはofstreamのメンバではないとでます。
>>969
<< >>は使いたくなくて、それに変わるのを探していました。
0976デフォルトの名無しさん
2006/08/21(月) 00:15:57何か参考になるものは無いでしょうか?
環境はVC2005EEです。
0977デフォルトの名無しさん
2006/08/21(月) 00:17:270978デフォルトの名無しさん
2006/08/21(月) 00:19:41<<, >> の替わりは無いよ。使いたくないなら iostream 系自体を使わないほうがいいよ。
0979デフォルトの名無しさん
2006/08/21(月) 00:19:45<cstring>のputs()グローバル関数
0980デフォルトの名無しさん
2006/08/21(月) 00:35:03GUIライブラリって何だ?
0981975
2006/08/21(月) 00:36:15.writeというのはあって、一応代用できそうです。
>>978
ホントそうかもしれません。Cの感覚が抜けなくて。
>>979
調べてみます。
0982デフォルトの名無しさん
2006/08/21(月) 00:41:24masu[8][8] は外部変数にしてしまえ。関数に分けやすくなる。
ほんとは struct board { int masu[8][8]; }; みたいなの作ってこれを引数渡しに
するのがベストだけど今はどっちでもいいと思う。
0983デフォルトの名無しさん
2006/08/21(月) 01:16:10だが、それを考慮しても>>953はオセロ投げて
勉強しなおした方がいい気がする。
0984デフォルトの名無しさん
2006/08/21(月) 02:44:48ついでに置石のチェックも入れといた
一応参考程度に
http://up2.viploader.net/mini/src/viploader62429.zip
0985デフォルトの名無しさん
2006/08/21(月) 02:53:290986デフォルトの名無しさん
2006/08/21(月) 03:09:29ケチョンケチョンに言われて泣きながら去っていきました。
0987デフォルトの名無しさん
2006/08/21(月) 03:13:19いやいや、俺たちなりの愛のある歓迎なんだぜ。
ソースへの批判というのは、その人の能力を引き上げる最大の要因と思うしな。
0988デフォルトの名無しさん
2006/08/21(月) 05:08:48リア厨か?
0989デフォルトの名無しさん
2006/08/21(月) 09:12:460990デフォルトの名無しさん
2006/08/21(月) 10:41:14出力がうまくいかないんですが原因は何でしょうか?
VC++でc++で作ってます。
0991デフォルトの名無しさん
2006/08/21(月) 10:50:15オセロ以上の汚いソースで見る気がしない。
0993デフォルトの名無しさん
2006/08/21(月) 14:41:30汚いというより、設計がヘタすぎて見てらんない。
この程度だとやりたいこと聞いて、自分で書いたほうが早そうだ。
0994デフォルトの名無しさん
2006/08/21(月) 15:38:09float f,g,h,*x,*y,*z;
x=&f;
y=&g;
でz=x-yが誤りなのが分かりません。どなたか教えてください
0995デフォルトの名無しさん
2006/08/21(月) 15:47:480996デフォルトの名無しさん
2006/08/21(月) 15:52:58その場合ポインタ同士の引き算はポインタ間の距離になるので、ポインタ変数には代入できません。
詳細は改めて次スレででも聞き直してくれ。
0997デフォルトの名無しさん
2006/08/21(月) 15:56:14ポインタ型同士の演算結果はポインタ型じゃないからだ
ポインタ型の演算結果がポインタ型になるのはポイント型に序数の加算か減算をした時だよ
0998デフォルトの名無しさん
2006/08/21(月) 15:57:24ポインタ ± ポインタ → 要素数
0999デフォルトの名無しさん
2006/08/21(月) 16:21:32おいこら、ポインタ同士の加算はねぇぞ。
1000デフォルトの名無しさん
2006/08/21(月) 16:32:56http://pc8.2ch.net/test/read.cgi/tech/1156145524/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。