[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/27 13:34 / Filesize : 231 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.40【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1184717430/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

543 名前:513 [2007/08/21(火) 14:06:22 ]
>>542
はい、まさに私のことです。

544 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:10:56 ]
W

545 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:01 ]
>>542
BCB使いもnewする癖が‥‥

546 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 15:40:21 ]
OOっぽく書こうとするとそうなるんじゃないかな
C++的にはスマートポインタを使え、ということになるんだが
いずれにせよ常にownershipを意識している必要はあるね

547 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:02:26 ]
ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。
# オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。

548 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:03:31 ]
>>545
VCL使ってると確かにnew癖つくなw

549 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:22:21 ]
カウンタ付けて自動でdeleteするclassくらい自作しろ

550 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:25:00 ]
何で既にあるもん作りなおさにゃならんのん・・・

551 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:27:07 ]
boostの名前あげるとboost厨ウゼェとか言われるから



552 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:08 ]
std::tr1::shared_ptrならいいのか?

553 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 04:50:10 ]
俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。

554 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 10:37:52 ]
もうIUnknown/comdef.hでいいよw

555 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:21:10 ]
int main (int argc, const char * argv[]) {
char string[] ="Hello,World";
char copystring[13];
stringcopy (string,copystring);
printf("%s¥n",copystring);
return 0;
}
void stringcopy (char *buff,char *copy){
int i = 0;
while(buff[i]){
copy[i] = buff[i];
i++;
}
copy[i] = '¥0';
}
でwhile(buff[i]){…}を
for(i=0;buff[i] == 0;i++)
copy[i] = buff[i];
とすると動かないんですけれど、何故ですか?

556 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:25:25 ]
>>555 条件逆にして動くとでも思ってんの?

557 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:29:42 ]
for(i=0;buff[i] == 0;i++){
printf("loop %d\n",i);
copy[i] = buff[i];
}

ってやってみたら、なにか気づくかも

558 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:36:13 ]
わかった!
for(i=0;buff[i] != 0;i++)
ってすると動くぞ!

559 名前:デフォルトの名無しさん [2007/08/22(水) 12:49:13 ]
Containerというクラス名をAAというクラス名にしたら、

Container.h:9: an anonymous union cannot have function members
Container.h:26: abstract declarator `<無名 class>' used as declaration
Container.h:26: anonumous 名前空間の集合体は static でなければなりません



560 名前:デフォルトの名無しさん [2007/08/22(水) 12:50:45 ]
>>559
すいません、間違えて「書き込む」ボタン押してしまいました。

Containerというクラス名をAAというクラス名にしたら、

AA.h:9: an anonymous union cannot have function members
AA.h:26: abstract declarator `<無名 class>' used as declaration
AA.h:26: anonumous 名前空間の集合体は static でなければなりません

というエラーが出てきたのですが、このエラーの意味が理解できません。
教えてください。

561 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:12:06 ]
エスパー募集するんでもなければコード貼れよ。



562 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:16:23 ]
>>560
最初のエラーだけとってみれば
無名共用体には関数メンバを持つことができない
というエラー。
だから名前だけじゃなくて何か意味または構造が変わるような修正をしてると
思うけど、情報が不足してるのでこれ以上のことは分からない。

563 名前:デフォルトの名無しさん [2007/08/22(水) 13:42:53 ]
>>559です。
自己解決しました。

ContainerからAAに名前を変えたときに、

#ifndef CONTAINER
#define CONTAINER
#include "Container.h"
#endif



#ifndef AA
#define AA
#include "AA.h"
#endif

としていたためにエラーが出ていました。

情報の足りない質問で申し訳ありませんでした。m(_ _)m

564 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:51:53 ]
>>563
まあ、解決したのはよかったけど、
そもそものソースの構造がおかしいんじゃないのか?
普通は Container.h の中で全体を

Container.h
-----------------
#ifndef CONTAINER
#define CONTAINER



#endif
-----------------
としてくくるんであって、includeする側では、二重取り込み防止マクロなんて書かないだろ。

565 名前:でいびす [2007/08/22(水) 16:08:55 ]
VC++5.0でファイルリードをやってます。

その時、読込んだ値を文字として認識できるか

調べたいのですが、やり方を教えてもらえませんか?

ループしながら、1文字づつ調べたいです。

ちなみに、文字列には半角の日本語と全角の日本語が混在しています。

お願いします。

566 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:23:15 ]
文字として認識ってのがあいまいだけど
_ismbbprint
あたり使えるか調べて見れ

567 名前:でいびす [2007/08/22(水) 16:51:43 ]
>>566

_ismbbprintは使えませんでした。

ビルドが通らなかったです。


568 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:13 ]
ttp://msdn2.microsoft.com/ja-jp/library/6d27cy2z(VS.80).aspx

569 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:59:27 ]
なんだってVC++5.0なんてもんを使ってるんだ

570 名前:でいびす [2007/08/22(水) 17:04:29 ]
>>569

古いプログラムをカスタマイズする事になったので使ってます。

571 名前:でいびす mailto:sage [2007/08/22(水) 17:11:52 ]
>>570

古いプログラムをカスタマイズする事になっても使う必要ありません。



572 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:23:18 ]
いやー、そうとも限らんぞー

573 名前:でいびす mailto:sage [2007/08/22(水) 17:24:06 ]
>>570

いやー、そうとも限らんぞー

574 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:25:49 ]
VC++5.0ってSTLがはじめてバンドルされた版だよな
無理やり使ったが、今にして思えばひでえ出来だった

575 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:20:05 ]
new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。

576 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:22:18 ]
new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。

577 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:42:58 ]
new(nothrow)使えば問題なし

578 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:45:10 ]
newハンドラ使えば問題なし

579 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 20:49:37 ]
set_new_handler じゃなくて _set_new_handler で、
new ヘッダじゃなくて eh.h で宣言されてたんだっけ。
bad_alloc は VC5 で宣言されてたっけ?

580 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:01:23 ]
>>565
VCだと昔から日本語対応の関数はあって、どこかのバージョンで
_ismbXXXX のようなマルチバイト系関数であることを明示するような
関数名になったはず。
それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。

で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので
試してはどうだろうか。
ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm

581 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:08:46 ]
UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は?
というのは余計なお世話か。



582 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:12:02 ]
文字コードについては>>565が勝手に判断するでしょ。
だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。

583 名前:でいびす mailto:sage [2007/08/22(水) 21:14:17 ]
VC9使うことにしますた

584 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:09:24 ]
VC++はソースのエンコードすら指定できない糞コンパイラ

585 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:13:51 ]
>>584はVC++はソースのエンコードすら指定できないコンパイラと思っている糞

586 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:20:15 ]
できるの?
clにそれらしいオプションが見当たらないからできんのかと思ってた

587 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:24:34 ]
>>585
どうやって指定するの?

588 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:31:21 ]
>>585
おれもきになる

589 名前:デフォルトの名無しさん [2007/08/22(水) 22:40:08 ]
std::vector<foo> hoge という変数があるとして、
これを関数の引数に渡すときはhogeのポインタを渡した方が
hoge自体を値渡しするより動作は速いですか?

590 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:41:32 ]
その通りだが、せっかくC++なのだからリファレンス渡しするか
iteratorを渡せ

591 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:43:22 ]
何すかそれ



592 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:45:33 ]
void hogehoge(std::vector<foo>& rhoge);

593 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:48:03 ]
>>591
void swap_ptr(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }
void swap_ref(int &a, int &b) { int tmp = a; a = b; b = tmp; }
main() { int m = 1, n = 2; swap_ptr(&m, &n); swap_ref(m, n); }

swap_ref()がリファレンス渡し。
この場合は入出力引数だが、入力だけでいいんならconstつけろ。

594 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:50:19 ]
>>590
サンクスコ

595 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:55:22 ]
>>593
サンクスコ

596 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:12:21 ]
ドトネトのMicrosoft.VisualC.CppCodeProviderってもしかしてclのかわりに
C++コンパイルできんのか
マネージドじゃないと無理かな

597 名前:デフォルトの名無しさん [2007/08/22(水) 23:37:33 ]
vector<CHoge>::iterator itr;

このitrが指してる要素の中身のアドレスを取りたいときは
どうやって書けばいいんですか?

CHoge* p_hoge;
p_hoge = &itr;

とか書いたら怒られました。


598 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:40:54 ]
p_hoge = &*itr;

599 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:12 ]
CHoge* p_hoge = &*p_hoge;

vectorなら鼻からbegin()/end()を使わず、
&v[0]と&v[0] + v.size()でポインタを得て、
それをイテレータとしても使うという手もある。

600 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:39 ]
>>598
出来ました。サンクスコ

601 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:12:40 ]
鼻から悪魔に見えた



602 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:32 ]
>>584
エンコードの指定は出来ないが、
BOMが付いてればUnicode LE/BEやUTF-8はそれで判定する。
BOMがなければANSI文字コードとみなしている。
javacやunix系のコンパイラはUTF-8にBOMが付いてると処理してくれないものが多く、
双方で利用しようとすると結構めんどい。

603 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:53 ]
悪魔から鼻に見えた

604 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:49:46 ]
>>577
そんなことしてもコンストラクタから飛んでくる例外は止まらないぜ。

605 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:50:20 ]
なんかかっこいい

606 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 11:14:46 ]
>>602
それなりに移植性考えたらC++のソースにBOMつけるとかありえんわな
で、当然boostのソースにはそんなもんついてないし、一部のヘッダにLatin-1な
人名が入ってるから、VC++8.0でコンパイルすると色々苦情を言ってくんのな


607 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:47:56 ]
C++でHTMLのタグのようなものを使用していたり、『::』のようなものなどを見かけます。
Cには無く、C++では使用出来るようなことを幅広く説明している書籍でお勧めのものはありますでしょうか。
発売年や価格、本自体の厚さなど数多くありすぎて、どういうものを購入すればいいのか分かりません。
近くに本屋さんはあるのですがプログラム関係は少ないですのでネット通販で買おうかと考えております。
それ故、内容が確認できず判断が・・orz

608 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:50:21 ]
HTMLのタグ・・・確かにそう見えんことはないw

609 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:58:28 ]
なんだそりゃ、templateのことか?
あまりに斬新過ぎる見解でワロタ

それはそうと、wxWidgetsのWindowProcって、ウィンドウクラスのインスタンス
見つけるのにわざわざグローバルなハッシュテーブル引いてんだな、なんだこりゃ
せめてWin32ならGetWindowLongPtr()使ってくれよ
なんかそうできない技術的理由があんのか

ATLみたいなサンクに書き換えたら、そんだけで激高速化すんじゃね?

610 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:15:45 ]
>>607
結局この本は必要…通読する対象ではない気がする、字引的にほぼ全部載ってる
www.amazon.co.jp/dp/475611895X

611 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:31:15 ]
そんなに高速化するわけない。
いったい一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかるというんだ?



612 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:41 ]
一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかる

613 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:38:15 ]
俺も初めて見たときはタグかと思った。
includeファイルに.hが付いていないことや、標準入出力に<<、>>を使うこと、
「::」の存在など何もかもが新鮮だったあの頃・・・
いまだに初心者の域を抜けられぬ現状orz


614 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:40:43 ]
::は斬新だった。こうゆう記号ってなんか意味を持って決められてるのかな?

615 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:43:25 ]
意味的に : を使いたいけど、ラベルと被るから :: にしたんじゃね?

616 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:24 ]
斬新といえばいえなくもないが、: (コロン)は、通常のラベルどころか

・caseのラベル(厳密にいえば通常のラベルと変わらない)
・クラス継承
・コンストラクタの初期化子(?)
・条件演算子の一部

など、よくこれだけ機能を持たせられたと思うものだ。

さらに、ストリームにビットシフト演算子を使うなんて、どこのアホが考えたかと思う。
演算子オーバーロードを見せつけるための演出としか思われない。

さらに、マニピュレータだって?printf系の方がよっぽどうまく素早く整形できるわ。
あんなのC++委員会の遊びにすぎんよ。

もっとも、Cよりは便利なので使わせていただいていますけどね。

617 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:07:29 ]
べ、別に好きでC++を使っているんじゃないんだからね!
Cより便利だから使ってあげているだけなんだからねっ!

618 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:22 ]
おっさんが書いてるんだぜ?きめぇ

619 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:29 ]
>>616
iostreamとマニピュレータの登場は、標準化委員会の発足より古いはず。

D&Eによれば入出力に演算子を使うのはDoug McIlroy、
マニピュレータはAndrew Koenigのアイデアだそう。



620 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 04:31:27 ]
printf より優れてる点は型安全な点とポリモーフィズムだな。
printf 風マニピュレータを作らなかったのは C++ の汚点だな。

621 名前:デフォルトの名無しさん [2007/08/25(土) 06:21:38 ]
なんで queue には clear() が無いの?



622 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:13:32 ]
ああ、すまん
作るの忘れてた

623 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 10:32:35 ]
納得した

624 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:37:06 ]
何のqueueにclearが無いの?

625 名前:デフォルトの名無しさん [2007/08/25(土) 11:05:14 ]
参照渡しでもらった引数をさらに別の関数に参照渡しするのって
なにか問題ありますか?

626 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 11:09:57 ]
G++ の STL の queue, priority_queue, stack.
コンテナアダプタには clear() が用意されて無いけど何か理由があるんでしょうか.

627 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:55:33 ]
G++wwwwwwなんという未来言語wwwwww

628 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:00:58 ]
無知発見

629 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:13:16 ]
自己解決しました.

630 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:15:02 ]
>>627
これはひどいwwwwwww

631 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:27:56 ]
>>627=630
そんなエサで俺様が釣られるかクマー



632 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:55:48 ]
>>625
別に問題ない。
寧ろ、参照渡しでもらったものをポインタ渡しするほうがおかしいし、
参照渡しでもらったものを値渡ししてしまったら意味が違ってしまう。

633 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 15:43:54 ]
何でないんだろうね。
プリンタジョブとかに queue を使ったとして、
ジョブを全部破棄とかすることあるだろうに。

634 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:01:42 ]
1億と2000年前からpopしなさい、というお達しか

635 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:12:47 ]
while(!q.empty()) { q.pop(); }

としろ、ということか。

636 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:14:26 ]
そうだdequeをつかおう

637 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:16:04 ]
q.~queue();
new(&q) std::queue<T>;
冗談だよ、冗談。

638 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:24:21 ]
素直にq=std::queue<int>();と書いてやれよw

639 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:40:57 ]
queue のソースを書き換えればいいんじゃね?

640 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:47:21 ]
queue を継承した my_queue を(ry

641 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:26:24 ]
(x = 1) = 2;

これ、Cだとエラーなんだが、C++ではコンパイルできる
何で?



642 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:11:39 ]
x = 1の結果が、Cは右辺値、C++は左辺値と定められているから。

643 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:19:25 ]
>>642
やっぱりそういうこと?
ストラウストラップの本とK&RとCの規格書調べたんだけど、それらしい記述を
見つけられなかったんだけど、どこかに明記されている?







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef