【初心者歓迎】C/C++室 Ver.66【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/05/28(木) 01:08:48ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.65【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1239326399/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0153146
2009/06/03(水) 20:45:12ありがとうございました!できました。
エラーの意味が少し分かった気がしました(これから勉強します)。
>>147-148
即レス感謝しております。色々とキッカケになりました。
ありがとうございました。
0154デフォルトの名無しさん
2009/06/03(水) 23:02:040155デフォルトの名無しさん
2009/06/04(木) 01:41:16このページを参考にコンパイラをインストールしました。
このページの最後にある、使い方を見るってやつのことで質問なのですが、
僕のbcc32は奥の方にあって(C:\Borland\...)、最終的にbcc32があるところにたどりつくのですが、
ここでしかコンパイラできないじゃないですか?
それが面倒なのでどうにか簡単にできないかってことと、
bcc32があるディレクトリの中には他にもいろんなプログラムがあるんですが、作成したCファイルも
同じところに保存しないとコンパイル&実行できないですよね?
つまりこのディレクトリの中がいろんな形式のファイルがあってめちゃくちゃ汚くなっちゃうわけです。。
これってなんとかキレイにまとめる方法ってあるでしょうか?
もしあるなら、申し訳ありませんが教えてください(>_<)
0156155
2009/06/04(木) 01:46:27一部コンパイラ→コンパイルですね
↑のは自分で見なおしてみるとちょっと日本語がアレなので簡潔に質問しますと、
1.cdの回数を最小限にする方法(bcc32を含むディレクトリをC:の直下に持ってきていいのでしょうか?)
2.CファイルはCファイルだけでどこかにまとめて、そのうえでコンパイル&実行はできるのか
ということです。
よろしくお願いします。。
0157デフォルトの名無しさん
2009/06/04(木) 02:27:13>インストール(WindowsVista)に進む
>インストール(WindowsXP,2000)に進む
>インストール(Windows98,95)に進む
のどれかを見ろ。
環境変数を設定する解説がある。
それを設定すれば、どこからでもbcc32が呼び出せるようになる。
あとは好きなところにディレクトリを作って、その中でコンパイルすればいい。
0158デフォルトの名無しさん
2009/06/04(木) 02:29:080159156
2009/06/04(木) 11:46:59ありがとうございます。
OSはVistaで、ここに書いてある通り環境変数も設定したつもりなのですが
できないんです。。
;c:\borland\bcc55\bin
ですよね?
これだとここで指定したディレクトリじゃないとできないってことでしょうか?
ローカルディスク(C)の中ならどこでもコンパイルできるようにするには、設定を
c:\
にすればいいということでしょうか?
0160デフォルトの名無しさん
2009/06/04(木) 11:52:18コマンドラインで、path と打って出てくる文字列に c:\borland\bcc55\bin はあるか?
ちなみにシステム変数の設定をしたあとで開いたコマンドプロンプトじゃないと
有効じゃないぞ
0161デフォルトの名無しさん
2009/06/04(木) 12:06:53コマンドプロンプトでpathを打つとちゃんと出てきます。
それで、確認用ファイルを
c:\Emacs\C\test.c
という風に作ったディレクトリに保存して、Cディレクトリ内で
c:\Emacs\C\>bcc32 test.c
というようにコマンドしても操作可能なプログラムとして…
というメッセージが返ってきます。。。
0162デフォルトの名無しさん
2009/06/04(木) 12:28:01これを、
c:\borland\bcc55\bin\bcc32 test.c
と打つとどうなるよ。
0163デフォルトの名無しさん
2009/06/04(木) 12:29:09最初と最後以外は ; で区切ってないと前後とくっつくぞ
0164デフォルトの名無しさん
2009/06/04(木) 13:16:59どうしてもC++で書きたかったら、
struct sockaddr_in
とかそういうのは、上手く自作のクラスにまとめてしまえばいいのでしょうか?
0165デフォルトの名無しさん
2009/06/04(木) 13:25:450166デフォルトの名無しさん
2009/06/04(木) 13:38:12とかそういう感じのプログラムばかりだったので、みんなそんな感じなのかなと。
0167デフォルトの名無しさん
2009/06/04(木) 14:03:34そうコマンドすればコンパイルできます。
ただし、"コマンド'ilink32.exe'を実行できない"とエラーが出ます。
やはりbinディレクトリの中でやりくりするしかないのでしょうか?
>>163
そこは大丈夫です。ちゃんと; ;で挟んであります。
0168デフォルトの名無しさん
2009/06/04(木) 14:07:11リンカがパス通ってないからな。
それでコンパイルできるなら、PATHがおかしいんだよ。
どこかタイプミスがあるはず。その部分コピペして貼り付けてみ。
コマンドプロンプトのコピーのしかたはわかるよな?
0169デフォルトの名無しさん
2009/06/04(木) 14:30:41%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\usr\local\bin;D:\MinGW\bin;c\borland\bcc55\bin;C:\Program Files\QuickTime\QTSystem\
これがパスの設定です。これのことですか?
コマンドプロンプトのコピーの仕方はわかりませんが(笑)、
ちょっと打ってからTabで出してるのでタイプミスはないと思います。。
0170デフォルトの名無しさん
2009/06/04(木) 14:33:55>c\borland\bcc55\bin
コロンが抜けてる
c:\borland\bcc55\bin
で
0171デフォルトの名無しさん
2009/06/04(木) 14:37:58感動した!
0172169
2009/06/04(木) 15:36:42おぉ!!できました!
親切にありがとうございます!!
171じゃないですが、本当に優しい人が多くて助かりました!
あと、ついでと言ってはなんですがコマンドプロンプトについて質問です。
コマンドプロンプトを開いたときの最初の位置が
C:\Users\kei
になってます。(keiは僕の名前です)
開いたとき一番最初は C:\ になってると一番都合がいいのですが、そのように設定できますか?
プロパティとかいろんなトコからやろうとしても見当たらないので…。
0173デフォルトの名無しさん
2009/06/04(木) 15:39:15何に使うんだろう
0174デフォルトの名無しさん
2009/06/04(木) 15:39:16プログラムはcmdで、作業フォルダはC:|
0175174
2009/06/04(木) 15:40:160176デフォルトの名無しさん
2009/06/04(木) 16:21:59どう開いても変なディレクトリから入っちゃいます。。
cd ../../
を毎回やるのは億劫なので。。。
0177デフォルトの名無しさん
2009/06/04(木) 16:37:32cd \ でいいじゃない
0178デフォルトの名無しさん
2009/06/04(木) 16:40:040179デフォルトの名無しさん
2009/06/05(金) 08:08:41extern AClass a;
でいいの?
0180デフォルトの名無しさん
2009/06/05(金) 08:22:59cd ..\...\
bcc32 %1
とか。
0181デフォルトの名無しさん
2009/06/05(金) 09:58:570182デフォルトの名無しさん
2009/06/05(金) 11:16:18みたいなメッセージが最初の動作時に一回だけ出るときがありますが、出ても最初の一回だけで
その後は出ません。これってプロパティのどこかにアンブロックしたという記録が残っている
のでしょうか?
0183デフォルトの名無しさん
2009/06/05(金) 17:56:010184デフォルトの名無しさん
2009/06/05(金) 19:23:36レジストリのどこかは知らないが、設定の閲覧・変更は
コントロールパネルのWindowsファイアウォールのところを見ればいい。
0185デフォルトの名無しさん
2009/06/05(金) 20:44:54ありがとうございます。コントロールパネルに見つかりました。
あともう1つだけ。(板違いといわれそうなのですが…一応C++で書いているので)
TCPで複数のコネクションを同時に保持するサーバーを書きたいのですが、サーバ側から
みた通信先はどうやって区別すればよいですか?適当にIDとかを割り振ってそこをみるように
すればいいんでしょうか?
××のソースをみろとかでもいいです。どうかお願いします。
0186デフォルトの名無しさん
2009/06/05(金) 20:48:43ソケットなら接続してきたクライアントの情報を得られる。
ネットワークプログラミング相談室なんてスレがなかったかな?
0187デフォルトの名無しさん
2009/06/05(金) 21:10:01ありがとうございます。
ということは、accept()で得られたクライアント情報のIPアドレス+ポート番号
の組でクライアントを識別するということですか?
>ネットワークプログラミング相談室なんてスレがなかったかな?
次からはそっちで聞いてみます。
0188質問
2009/06/05(金) 23:03:36textBox1に自由に入力させ、「眼鏡」という文字列が入力された瞬間に
メッセージボックスを表示するにはどうしたらいいでしょうか
TextChangedイベントの中でif(textBox1->Text=="眼鏡")としたんですが、
前後に文章があるときもメッセージボックスを表示させたいです
よろしくお願いします
0189デフォルトの名無しさん
2009/06/05(金) 23:57:400190デフォルトの名無しさん
2009/06/06(土) 01:25:52引数としてクラスのポインタを受け取り、そのポインタにnewでクラスのインスタンスを作る関数は作れますか?
また、どのように作るのでしょうか?
そうして作ったインスタンスを関数の外でdeleteしたいのです
よろしくお願いします
0191デフォルトの名無しさん
2009/06/06(土) 01:33:14void f(int*& rp)
{
rp = new int;
}
int main()
{
int *p;
f(p);
delete p;
}
0192デフォルトの名無しさん
2009/06/06(土) 01:45:090193デフォルトの名無しさん
2009/06/06(土) 01:51:180194デフォルトの名無しさん
2009/06/06(土) 03:34:30コンストラクタの後ろに付加、コンストラクタの中で代入、初期化用メンバ関数を用意してコンストラクタの中で呼び出し
……とかいろいろ考えられると思うけど、使い分けってある?
あと、特に理由がない限り、コピーコンストラクタに初期化処理ってしなくても大丈夫よね?
0195デフォルトの名無しさん
2009/06/06(土) 03:48:26初期化で済む物を代入にするメリットは全くない
0196デフォルトの名無しさん
2009/06/06(土) 03:50:05const なメンバ変数
=> 初期化リストでしか初期化できない。
初期化のために手続きが必要
=> 初期化リストでは無理
初期化のタイミングがコンストラクション時以外にもある
=> じゃ、別関数にしておくか
0197デフォルトの名無しさん
2009/06/06(土) 03:51:050198デフォルトの名無しさん
2009/06/06(土) 04:17:00途中でリセットする場合以外でも、お婆ロードでコンストラクタが複数あるときは
別関数の方が楽そう……かな?
0199デフォルトの名無しさん
2009/06/06(土) 04:53:35ユニコードONの状態で
wchar_t type[255] = _T("うんこ");
MessageBox(NULL, (PCTSTR)typeid(type).name(), NULL, MB_OK);
とすると文字化けしてしまうのですが、なんでですか?
文字列リテラルにLをつけないといけないのと関係あります?
うまく表示する方法ってどうやるのですか?
まだ始めたばっかだしマルチバイトでやればいいのでしょうけど
気になるので、よかったら教えてください
お願いします
0200デフォルトの名無しさん
2009/06/06(土) 06:47:24Effective C++は読んだかい?
まだなら定額給付金を片手に今すぐ本屋に行くんだ。
0201デフォルトの名無しさん
2009/06/06(土) 06:48:32MessageBoxA(NULL, typeid(type).name(), NULL, MB_OK)
0202デフォルトの名無しさん
2009/06/06(土) 06:57:13おや なぜか めのまえの ほんだなに おいてあるぞ!
0203199
2009/06/06(土) 15:31:21MessageBoxAとMessageBoxWがあって
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
こんなんなってるんですね
だからMessageBoxAを強制的に呼び出してやると
氷解しました。ありがとうございます。
0204デフォルトの名無しさん
2009/06/06(土) 17:26:42TCHAR type[255] = _T("ちんこ");
MessageBox(NULL, type, NULL, MB_OK);
0205デフォルトの名無しさん
2009/06/07(日) 13:03:160206デフォルトの名無しさん
2009/06/07(日) 14:01:55void *p = &org_i;
int i = *reinterpret_cast<int*>(p);
voidへのポインタからINTの値を取り出そうとして上のようにしたのですが、
reinterpret_castの前に*があったりしてなんとなくいやです。
ほかに方法はないでしょうか?
0207デフォルトの名無しさん
2009/06/07(日) 14:04:280208デフォルトの名無しさん
2009/06/07(日) 14:05:170209デフォルトの名無しさん
2009/06/07(日) 14:50:41template <class T>
T pointer_value(const void* p)
{
return *static_cast<const T*>(p);
}
こうする
int i = pointer_value<int>(p);
0210デフォルトの名無しさん
2009/06/07(日) 14:56:130211デフォルトの名無しさん
2009/06/07(日) 17:15:04お前が勉強しろ
0212デフォルトの名無しさん
2009/06/07(日) 18:35:310213デフォルトの名無しさん
2009/06/07(日) 18:46:180214デフォルトの名無しさん
2009/06/07(日) 18:56:050215デフォルトの名無しさん
2009/06/07(日) 19:20:16インスタンスAがB1に参照されてる状態から
B2がインスタンスAを参照したらB1からAの参照が切れる
常にAが1個のBから参照されるような関係を作るにはどうしたら良いでしょうか?
0216デフォルトの名無しさん
2009/06/07(日) 19:37:110217デフォルトの名無しさん
2009/06/07(日) 20:04:470218デフォルトの名無しさん
2009/06/07(日) 23:29:49B同士で所有の移動をするメソッドを、ということでしょうか?
>>217
BがAに更新通知してAがBの値を読みに行くので
Aへの更新通知を別の方法で実現できればそれでもいいのですが・・
0219デフォルトの名無しさん
2009/06/08(月) 00:37:330220デフォルトの名無しさん
2009/06/08(月) 00:38:580221デフォルトの名無しさん
2009/06/08(月) 00:41:570222デフォルトの名無しさん
2009/06/08(月) 01:43:02Aに"今からお前の相手するBインスタンスはわしじゃ"通知メソッドを作れば?
その際に元彼Bに"もう私のことは放っておいて"通知メソッドをAから呼んでもらう
0223デフォルトの名無しさん
2009/06/08(月) 11:43:40戻り値だけが違う関数を複数作りたい場合どうするべきでしょうか?
class C1;
class C2;
というのがあって、
C1 create();
C2 create();
という感じにやりたいときです。
お願いします。
0224デフォルトの名無しさん
2009/06/08(月) 12:11:13無理です。だいたい呼び出せません。
名前空間を使いましょう。
0225デフォルトの名無しさん
2009/06/08(月) 12:17:56,で区切られて1行に並んでるファイル内の行列から数値を配列に入れる方法を教えてください!
0226デフォルトの名無しさん
2009/06/08(月) 12:23:49とりあえず手始めに、fgets()とsscanf()使ってみるのはどうか?
まあ配列に入れるならループで回してstrtokとatoi使う手もあるけど、
最後はstrtok+atoiみたいな関数を自分で作るのがいいかもね。
0227デフォルトの名無しさん
2009/06/08(月) 12:24:30注意点、スレッドセーフな処理にするための方法などを詳しく扱った書籍やサイトはないでしょうか?
0228デフォルトの名無しさん
2009/06/08(月) 12:25:39ありがとうございます
,の除き方を詳しく教えてください
0229デフォルトの名無しさん
2009/06/08(月) 12:26:37csvデータの読み込みでぐぐった方がいいかも
0230デフォルトの名無しさん
2009/06/08(月) 12:27:37sscanf()もstrtok()も , の処理はやってくれるだろ。
自前でやるならstrchr()で場所調べて切り出していけばいいと思うよ。
0231デフォルトの名無しさん
2009/06/08(月) 12:32:12全然知りませんでした
ありがとうございました
0232デフォルトの名無しさん
2009/06/08(月) 14:05:22dmyC{};
class C1{C1 operator=(dmyC&){*this=createC1();return *this;}};
class C2{C2 operator=(dmyC&){*this=createC2();return *this;}};
dmyC create(){return dmyC();}
C1 C1create(){〜return c1;}
C2 C2create(){〜return c2;}
なんのメリットがあるか知らんが使用側で偽多態受けなら出来ん事はない
前参照やスコープは適当に修正要
0233デフォルトの名無しさん
2009/06/08(月) 14:14:400234デフォルトの名無しさん
2009/06/08(月) 14:19:51dmyC{operator C1(){〜return c1;}operator C2(){〜return c2;}};
0235デフォルトの名無しさん
2009/06/08(月) 14:50:490236デフォルトの名無しさん
2009/06/08(月) 15:39:06わかったぽ
0237デフォルトの名無しさん
2009/06/08(月) 19:01:540238デフォルトの名無しさん
2009/06/08(月) 19:06:260239デフォルトの名無しさん
2009/06/08(月) 19:10:15GUIアプリを楽につくりたいならC#ですかね?
0240デフォルトの名無しさん
2009/06/08(月) 19:11:140241デフォルトの名無しさん
2009/06/08(月) 19:18:420242デフォルトの名無しさん
2009/06/09(火) 01:07:44があるとき、
array[10] == &array[10][0]
でしょうか?
0243デフォルトの名無しさん
2009/06/09(火) 01:14:000244デフォルトの名無しさん
2009/06/09(火) 01:14:190245デフォルトの名無しさん
2009/06/09(火) 01:17:52気になるならポインタがさしてるアドレスを比べてみなよ
0246デフォルトの名無しさん
2009/06/09(火) 01:20:47型は配列なので注意が必要、多分等しいだとは思うんだが。(両方とも配列)
配列はポインタに自動変換だが、逆はそうではない、やっぱ頭痛い。
0247デフォルトの名無しさん
2009/06/09(火) 01:23:22うぜぇぇ
0248デフォルトの名無しさん
2009/06/09(火) 01:24:56int a[10][20]; は、int10この配列が20個、ではないところがややこしい。
0249デフォルトの名無しさん
2009/06/09(火) 01:26:48Cの規則ですから
int func()[10]
{
return 配列;
}
おらよ、これでも喰らえってなもんだ
0250デフォルトの名無しさん
2009/06/09(火) 01:26:53配列や関数の型は、外側からはがしていく感じで解釈するんだよね。
0251デフォルトの名無しさん
2009/06/09(火) 01:49:26関数は配列を返せない
0252デフォルトの名無しさん
2009/06/09(火) 01:53:52ANSIでは使えない事になっているが、返せる処理系もっあってだな、
アホな開発者がそれを返している糞ライブラリがあるんだ
どこのかって?S○Eとか○CEとかSC○とか、まあそんなところ、死ねます。
■ このスレッドは過去ログ倉庫に格納されています