■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part36
751 名前:デフォルトの名無しさん :04/10/17 18:16:56
snprintf にして、戻り値もチェックすれば OK?

752 名前:デフォルトの名無しさん :04/10/17 19:32:17
文字の前に@を付けるにはどうしたらいい?

例えば
こんにちは
おはよう
と書き込んで変換したい場合

@こんにちは
@おはよう
見たいな感じで開いてるTXTファイルに書き込み

C++でサンプルソース作って下さい。

753 名前:デフォルトの名無しさん :04/10/17 19:34:36
>>752
こっちのほうが適切では?
【初心者歓迎】C/C++室 Ver.10【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1097416187/

754 名前:デフォルトの名無しさん :04/10/17 19:38:47
>>752-753
自演乙

755 名前:752 :04/10/17 19:56:13
自己解決しますた。



756 名前:デフォルトの名無しさん :04/10/17 20:16:20
次スレからGotWをテンプレに加えないか?
http://www.gotw.ca/

757 名前:デフォルトの名無しさん :04/10/17 20:23:13
Stroustrup が禿なら、Sutter は髭だな

758 名前:デフォルトの名無しさん :04/10/17 20:27:02
Sutter はあんまり話題にあがらないけどな

759 名前:デフォルトの名無しさん :04/10/17 20:33:56
去ったんだろ

760 名前:デフォルトの名無しさん :04/10/17 20:42:31
この秋一番の寒波

761 名前:デフォルトの名無しさん :04/10/17 20:45:55
>>759
>>759
>>759
>>759

762 名前:デフォルトの名無しさん :04/10/17 20:46:40
Scott Meyersはフサフサか

763 名前:デフォルトの名無しさん :04/10/17 20:47:37
>>759
おもしろい

764 名前:デフォルトの名無しさん :04/10/17 20:54:46
>>763
>>763
>>763
>>763

765 名前:デフォルトの名無しさん :04/10/17 21:02:18
>>762
フサフサ過ぎるくらいだな
ttp://www.aristeia.com/images/sdm-big.jpg

766 名前:デフォルトの名無しさん :04/10/17 21:37:26
まつもと >>>>>>>>>>>>>>>>>>>>> ScottMeyeyeyers

767 名前:デフォルトの名無しさん :04/10/17 22:35:21
だれ、まつもとって?

768 名前:デフォルトの名無しさん :04/10/17 22:38:30
松本コンチータだろ

769 名前:デフォルトの名無しさん :04/10/17 23:16:02
>>759はこの秋一番の豊作
才能を感じる

世界の中心で
愛を酒奉行

770 名前:デフォルトの名無しさん :04/10/18 00:52:09
Scott Meyersってもっと年食った人かと思ってたよ。ちょっとビックリ。

771 名前:デフォルトの名無しさん :04/10/18 01:07:48
おいらもびっくり

772 名前:デフォルトの名無しさん :04/10/18 01:12:56
ブラウンがお気に入りなんですな

773 名前:5 :04/10/18 01:22:59
ifsream in("test.dat");
string line;

while( !in.eof() )
{
getline(in, line);
if( lineが1個以上の空白文字のみからなるとき飛ばす条件 ) continue;

}

のようにtestファイルから行単位で読み込む時、1個以上の空白文字
のむを含む行の処理をとばすにはどうすればいいのでしょうか?


774 名前:デフォルトの名無しさん :04/10/18 01:45:30
>>773
line.find_first_not_of(' ', 0) == std::string::npos

775 名前:デフォルトの名無しさん :04/10/18 01:46:44
>>773
if (find_if (line.begin (), line.end (), bind2nd (not2 (equal_to <char> ()), ' ')) == line.end ())
かな?


776 名前:775 :04/10/18 01:48:58
>>774
へぇ〜そんなメンバ関数があったんだ


777 名前:デフォルトの名無しさん :04/10/18 01:53:27
>>776
実はさっきちょうどトーカナイザの実装をしていて、そのメソッドの文字列を
タイピングしていたところだったりする。

778 名前:773 :04/10/18 03:28:47
test.datが秀丸からみて
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
[EOF]
の場合はうまくいくんですが
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
↓ ここに関連する処理をお二人に教えてもらった方法で飛ばせるかどうかやったのですが駄目でした。
[EOF]

根本的に実装方法が悪いのかな



779 名前:デフォルトの名無しさん :04/10/18 03:38:18
>>778
それ「1個以上の空白文字」ないじゃん


780 名前:デフォルトの名無しさん :04/10/18 03:43:37
>>778
while(getline(in, line))
{
if (line.find_first_not_of(' ', 0) == std::string::npos)
continue;
}


781 名前:773 :04/10/18 04:12:49
>>779
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
 ↓ とか一マス以上あけても同じです、cygwinGCC使ってるんですがそのせいでしょうか。
[EOF]

782 名前:デフォルトの名無しさん :04/10/18 04:25:26
>>781
780


783 名前:デフォルトの名無しさん :04/10/18 07:01:27
今C++を勉強しています。
教則本をみながらやっているのですが、ウィンドウを作成するにもHINSTANCEやらよくわからない型がでてきます。
こういう教則本のソースなどは、隅々まで理解する必要がないのでしょうか。

とりあえず、コンパイルして(例えば)CreateWindowはどういう働きをするのかなどが理解できれば先に進んでもいいんですかね?

784 名前:デフォルトの名無しさん :04/10/18 07:19:06
>>783
あなたが勉強しているのはWindowsAPI。
言語の勉強と環境の勉強をごっちゃにして混乱されぬよう、気をつけられよ。
ちなみにここはC++スレ、質問はWindowsAPIでスレ違いにて、あしからず。

こちらなどを伺われよ。
http://pc5.2ch.net/test/read.cgi/tech/1095534704/

785 名前:デフォルトの名無しさん :04/10/18 07:25:20
それC++ちゃう。Win32 APIや! だから、スレ違い!

んで、Win32 APIの関数はMSDNで調べるといいよ

786 名前:デフォルトの名無しさん :04/10/18 07:40:04
ご指摘ありがとうございます。
スレ違いでしたか…すみません。

わからない関数があるときはMSDNで調べればいいわけですね。
>>784さんのスレも一通り読んで見ます。

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

787 名前:デフォルトの名無しさん :04/10/18 09:38:41
stricmp("AAA","aaa")
をC++流に書くとどうなるのですか?

788 名前:デフォルトの名無しさん :04/10/18 10:03:59
>>787
まずはパラメータの個数と型を正しくする。

789 名前:788 :04/10/18 10:08:11
>>787
あーごめん、strncmp()かと思ったよ。stricmp()なんて非標準関数持ち出すとは思わなくてね。
で、その関数の仕様は?

790 名前:デフォルトの名無しさん :04/10/18 10:22:44
>>788
stricmpのどこが非標準なのかと小一時間・・・

791 名前:デフォルトの名無しさん :04/10/18 10:26:54
>>790
はぁ?

792 名前:787 :04/10/18 10:52:14
>>789
大文字は小文字としてstrcmpをしてくれます。
stricmp("AHO","aho") == 0 となります

793 名前:デフォルトの名無しさん :04/10/18 15:39:37
>>783
プログラミングの前に、まずは適切なスレを見分ける能力を養え。

794 名前:デフォルトの名無しさん :04/10/18 18:57:36
問題の切り分けなんて、本を読んだり実際にプログラムを読み書きしながら学んでいくしかないだろ。


795 名前:デフォルトの名無しさん :04/10/18 22:03:40
com研究所のURL教えれ


796 名前:デフォルトの名無しさん :04/10/18 22:06:30
>>790
stricmpは規格にない。それだけで十分だろう。

797 名前:デフォルトの名無しさん :04/10/18 22:07:27
>>796
ここはC++のスレだぞ。
stricmpはCにはないがC++にはある。

798 名前:796 :04/10/18 22:15:16
>>797
ISO/IEC 14882:1998にはないが何か?

799 名前:デフォルトの名無しさん :04/10/18 22:17:26
com研究所のURL教えれ

800 名前:デフォルトの名無しさん :04/10/18 22:48:52
800ゲットですが何か?

801 名前:デフォルトの名無しさん :04/10/18 22:58:23
やおいゲット!!

802 名前:デフォルトの名無しさん :04/10/18 22:59:15
そうはいっても、gccにはあるみたいだね。
snprintfと似たような状況だね。
snprintfが標準になる日は何時だろう・・・。
つか普通の開発じゃsprintf()禁止令出るもんだし、はやく標準にしてもらいたい。

803 名前:デフォルトの名無しさん :04/10/18 23:01:25
stricmpか
localまで考え出すとキリが無いわな

804 名前:デフォルトの名無しさん :04/10/18 23:02:21
>>802
あれだ、stringstreamを頑張って使え

805 名前:デフォルトの名無しさん :04/10/18 23:06:15
まっ、糞みてーなライブラリだけど、boost::formatでも使っとけ


806 名前:カナガワ :04/10/18 23:42:04
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?

807 名前:デフォルトの名無しさん :04/10/18 23:51:59
>>803
まさか locale と間違えてたりする?


808 名前:カナガワ :04/10/19 00:03:54
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?

809 名前:デフォルトの名無しさん :04/10/19 00:12:33
>>807
てへ

810 名前:デフォルトの名無しさん :04/10/19 00:13:56
>>802
gccにあるだけで標準扱いかよ。
ウンコ野郎だな

811 名前:796 :04/10/19 00:49:37
>>802
ま、C99には入っているし、C++の改定で入る予定では
あるみたいだけれども。
"will likely be in C++0x"
ttp://gotw.ca/publications/mill19.htm

812 名前:カナガワ :04/10/19 01:34:12
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?

813 名前:デフォルトの名無しさん :04/10/19 01:43:31
ない
MSの伝統

814 名前:デフォルトの名無しさん :04/10/19 01:43:45
ない

815 名前:デフォルトの名無しさん :04/10/19 20:44:14
int* p = new int();
std::cout << *p << std::endl;
std::cout << int() << std::endl;

VC6SP6
どちらも0になると思ったのですが、newの方は非0になりました。
(デバッグモード・リリースモードどちらも同じ結果でした)
C++的にこれは正しいのでしょうか?

816 名前:デフォルトの名無しさん :04/10/19 21:05:13
>>815
正しくないです。
"If the new-initializer is of the form (), default-initialization shall be performed"
(5.3.4 New -15- より)

817 名前:815 :04/10/19 21:09:06
>>816
ありがとうございます。
VC6を窓から投げ捨てようと思います。

818 名前:デフォルトの名無しさん :04/10/19 21:16:26
C++使いたいならVC6は使うなっていうやりとりをもう何回も見てきたが、
いっそのことテンプレにでもいれたらどうなんだ?

819 名前:デフォルトの名無しさん :04/10/19 21:26:54
会社の事情でVC6を使わざるを得ない人もいるのよ。

820 名前:デフォルトの名無しさん :04/10/19 21:37:24
ARM 仕様の処理系を ISO/IEC 14882 で論じるバカどもがまた蛆虫のように涌いて出てるな

821 名前:デフォルトの名無しさん :04/10/19 21:48:32
1.start_engine
2.StartEngine
3.startEngine

みなさんは 1, 2, 3 のどのスタイル使ってますか?
自分はスタイルがAPIやSTLとかぶらないように
Java風な3を使ってるんですが、正直美しいとは
思えませんです。他に何かいいスタイルありますかね…?

822 名前:デフォルトの名無しさん :04/10/19 21:50:16
>>819
だから、VC6はC++じゃないからあきらめろ、っつーかこのスレに来るな、ってことでしょ。
VC6が悪いんであって、VC6を使う人は悪くないよ。念のため。

823 名前:デフォルトの名無しさん :04/10/19 21:54:30
>>821
ここでやる話ではない。むしろ、ここでやってはいけない話かもしれない。

824 名前:デフォルトの名無しさん :04/10/19 21:56:51
識別名のつけ方は、パラダイムや言語の特徴に依存する面もあるから、いいんじゃないか?

825 名前:デフォルトの名無しさん :04/10/19 21:57:15
>>821
3でいいと思うよ。2だとクラス名で被るし、1だとタイプ数が増える

826 名前:デフォルトの名無しさん :04/10/19 21:58:14
>>821
どのスタイルというよりコーディング基準に従うだけだ
はっきり言われてなくても周り乖離しないように気をつけてる

827 名前:デフォルトの名無しさん :04/10/19 22:45:22
>>821
(メンバ)変数は1
(メンバ)関数は2
3は最近知ったから,特に使ってなかったけどどっかに使おうかなぁと考え中

まだ社会に出てないお子ちゃまなので参考にはならんだろうけど

828 名前:デフォルトの名無しさん :04/10/19 23:10:22
>>827
社会に出るまでにスタイルを統一しなさい

829 名前:デフォルトの名無しさん :04/10/19 23:19:26
>>828
社会に出ればスタイルの統一なんて自分の一存ではできないだろ。
「統一しなさい」なんて言ってできるわけない。

830 名前:デフォルトの名無しさん :04/10/19 23:32:59
なにいってんだ

831 名前:827 :04/10/19 23:36:26
>>828
いや、一応↑で統一してるんだけども…
でも>>825のクラス名と被るの言い分は納得。
もう一度洗いなおしてみるかな。

コーディング規約スレもっと伸びないかな
ああいう情報もっと欲しいYO

832 名前:デフォルトの名無しさん :04/10/19 23:39:15
くだらねえんだよ

833 名前:デフォルトの名無しさん :04/10/19 23:52:19
ねぇ、C++を作ったってどういうこと?
一体Bjarne Stroustrup 彼は何を作ったの?


834 名前:デフォルトの名無しさん :04/10/19 23:55:00
C++の基本的言語仕様を作った。

835 名前:デフォルトの名無しさん :04/10/20 00:06:39
ちょっと待て。
>>815
そのコードはDebugビルドで実行していないか?
もしそうならReleaseビルドだとどうなる?

836 名前:デフォルトの名無しさん :04/10/20 00:10:36
>>835 よく見ろ。

837 名前:デフォルトの名無しさん :04/10/20 00:16:48
がーん

838 名前:デフォルトの名無しさん :04/10/20 00:20:39
>>837
フフフフフフフフフフフフフフフフフフフフフフ

839 名前:デフォルトの名無しさん :04/10/20 00:24:24
「フ」が10こ(ぐらい)で豆腐

なーーんちゃって!

840 名前:デフォルトの名無しさん :04/10/20 00:25:22
全米が泣いた

841 名前:デフォルトの名無しさん :04/10/20 00:33:43
ふとんがふっとんだーーー!!

842 名前:デフォルトの名無しさん :04/10/20 00:37:11
ふっとんだのはふとんですか?

843 名前:デフォルトの名無しさん :04/10/20 01:05:10
ふっとんだのはぬるぽです

844 名前:デフォルトの名無しさん :04/10/20 01:08:22
グーでガッしていいですか?

845 名前:デフォルトの名無しさん :04/10/20 01:08:28
ぶどうがぶっとんだ

846 名前:デフォルトの名無しさん :04/10/20 01:15:49
ぶっとんだのはぶどうですか?

847 名前:デフォルトの名無しさん :04/10/20 01:43:34
ふっ飛ばしたのは台風ですが。
なんかネタないんかい。

848 名前:デフォルトの名無しさん :04/10/20 07:20:34
おまいら夜は激しいですね

849 名前:デフォルトの名無しさん :04/10/20 10:36:36
激しいのは夜だけですか?

850 名前:デフォルトの名無しさん :04/10/20 11:12:00
(*´ー`)漏れはまだまだ若いさ

851 名前:デフォルトの名無しさん :04/10/20 13:25:43
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
から誘導されてきました。

#include <memory>
struct A { virtual ~A() {} };
class B : public A {};
class C : public A {};

int main(int argc, char* argv[]) {
int i = 0;
std::auto_ptr<A> p(i == 0 ? new B : new C);
return 0;
}

VC++6SP6 。このコードをコンパイルすると
error C2446: ':' : 'class C *' 型から 'class B *' 型への変換ができません。指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2664: '__thiscall std::auto_ptr<struct A>::std::auto_ptr<struct A>(struct A *)' : 1 番目の引数を '' から 'struct A *' に変換できません。
と出ます。理由がわかりません。何が間違っているのでしょうか?

852 名前:デフォルトの名無しさん :04/10/20 13:41:16
i == 0 ? new B : new C の結果は何型?

853 名前:851 :04/10/20 13:46:52
>>852
B*ですよね?
でauto_ptr<A>のコンストラクタの引数の型はA*だからそのまま渡せると思うのですが。
std::auto_ptr<A> p2(new B);
が通るので正しいはずですよね?
もしかして私何か勘違いしてますか?

854 名前:デフォルトの名無しさん :04/10/20 13:54:12
>>853
じゃi = 1なら
i == 0 ? new B : new C の結果はC*かい?
そうすると「?:」は返り値の方がダイナミックに変わる演算子ってことになるけど


855 名前:デフォルトの名無しさん :04/10/20 14:04:09
>853
コンパイラは x ? y : zという演算の型を,
yとzの型を元にいくつかの複雑なルールに従って決めようとします.
そしてyとzの型が関係の無い型のポインタ型であるときには,
この演算結果の型を決めることが出来ずコンパイルエラーとなります.
ちなみにあなたがやりたいことは以下で出来ます.

i == 0 ? (A*)new B : new C

856 名前:851 :04/10/20 14:15:19
>>854-855
ああなるほどよくわかりました。
今まで何気なく?:を使ってたんですが、今回のようなことは気付きませんでした。
ありがとうございました。

857 名前:デフォルトの名無しさん :04/10/20 16:59:20
C++って言語じゃないのか

858 名前:デフォルトの名無しさん :04/10/20 17:42:11
>>857
C++はプログラミング言語だが何か。

859 名前:デフォルトの名無しさん :04/10/20 17:57:11
すいません、質問です。下のプログラムを g++ -Wall でコンパイルすると
T.cc:9: warning: `struct NonVirtualClass' has virtual functions but non-virtual destructor
って怒られるんですが、原因が理解できません。
~X(){} がなければ怒られないのですが・・・
ちなみに g++ のバージョンは 3.3 です。

struct X {
~X() {}
};

struct VirtualClass {
virtual void Method() = 0;
};

struct NonVirtualClass : VirtualClass {
X m;
void Method() {}
};



860 名前:デフォルトの名無しさん :04/10/20 17:59:07
>>859
つEffective C++

861 名前:デフォルトの名無しさん :04/10/20 18:00:27
>>859
g++は警告出してくれるんだ・・・やさしいなぁ・・・。

862 名前:デフォルトの名無しさん :04/10/20 18:06:45
>>859
つ[英和辞典]

863 名前:デフォルトの名無しさん :04/10/20 18:07:55
>>859
つI

864 名前:デフォルトの名無しさん :04/10/20 18:08:41
struct X {
virtual ~X() {}
};

865 名前:デフォルトの名無しさん :04/10/20 18:11:57
>>864
struct VirtualClass {
virtual ~VirtualClass() {}
virtual void Method() = 0;
};
仮想デストラクタが必要なのはこっちだろ。

866 名前:859 :04/10/20 18:14:46
>>865
ありがとうございました!


867 名前:デフォルトの名無しさん :04/10/20 18:56:00
>>864
アホだ

868 名前:デフォルトの名無しさん :04/10/20 19:06:11
おい、ちょっとまて。
>~X(){} がなければ怒られないのですが・・・
これどーゆーいみよ。

869 名前:デフォルトの名無しさん :04/10/20 19:37:42
>>868
 クラスじゃないからだろ。

870 名前:デフォルトの名無しさん :04/10/20 21:27:10
>>869
~X() があればクラスだっていうのか?

871 名前:デフォルトの名無しさん :04/10/20 21:40:55
うまくつながってないんじゃ?

872 名前:デフォルトの名無しさん :04/10/20 22:28:54
>>868
~X() があると NonVirtualClass にもコンパイラによって自動的にデストラクタが作成される。
おそらくg++はこの暗黙のデストラクタをvirtual指定無しとして扱って件の警告が出るのではないかと。

873 名前:デフォルトの名無しさん :04/10/20 22:56:24
>>872
デストラクタのあるメンバを置いただけでも警告が出るようになるな。

12.4 Destructors の -3- -4- に従って
non-trivial なデストラクタを持つかどうかが警告の出る条件になるんだろう。

874 名前:デフォルトの名無しさん :04/10/21 00:10:31
これってどうよ?

#include <iostream>
using namespace std;
class CBase
{
int m_id1;
public:
CBase(int id1 = 1):m_id1(id1){}
int GetID1() const { return m_id1; }
};
class CDerived : public CBase
{
int m_id2;
public:
CDerived(int id2 = 1):m_id2(id2),CBase(id2*10){}
int GetID2() const { return m_id2; }
};
class CFactory
{
protected:
CFactory(){}
public:
static CBase* GetInstance(){ return new CBase(111); }
};
int main()
{
CBase* p = CFactory::GetInstance();
cout << ((CDerived*)p)->GetID2() << endl;
}


875 名前:デフォルトの名無しさん :04/10/21 00:15:30
>>874 意味不明

876 名前:デフォルトの名無しさん :04/10/21 00:17:59
>>875
初心者は口出すなよ

877 名前:デフォルトの名無しさん :04/10/21 00:19:21
>>876
エスパー以外は初心者か。おめでてーな。

878 名前:デフォルトの名無しさん :04/10/21 00:21:07
「どうよ」っていう言葉ってどうよ?

879 名前:デフォルトの名無しさん :04/10/21 00:23:35
>>874
「結果は未定義」が正解。

880 名前:デフォルトの名無しさん :04/10/21 00:24:42
ただのダウンキャストがどうかしたのか

881 名前:デフォルトの名無しさん :04/10/21 00:27:00
どうよもくそもねぇじゃん。
まじめに読んで損した。

882 名前:デフォルトの名無しさん :04/10/21 00:49:06
QueryInterface がどうだかって言いたいのか?

883 名前:デフォルトの名無しさん :04/10/21 01:26:07
>>874
 SEGV

884 名前:デフォルトの名無しさん :04/10/21 06:56:31
ファクトリを持ち出したところに何か隠された意味があるのではなかろうか

885 名前:デフォルトの名無しさん :04/10/21 07:05:08
だめ!!もう限界。
>>874、答えを教えてください。

886 名前:デフォルトの名無しさん :04/10/21 08:18:58
template<class T> T* Allocate( ptrdiff_t n, T* ) {
  return (T*)operator new((size_t)n * sizeof (T));
}
こんなnewの使われ方をはじめて見たのですが、なにを表しているのですか?
動作させてみたところ、指定したサイズを確保し、コンストラクタは呼ばれないようですが。
「プログラミング言語C++第3版 」を買えばこういったことがすべて書いてありますでしょうか?

887 名前:デフォルトの名無しさん :04/10/21 08:32:26
>>886
通常のnew演算子で呼び出されるメモリ確保の直接呼出しです。
その本には確かに書いてあります。

888 名前:デフォルトの名無しさん :04/10/21 08:38:36
通常の方法ですか。どうもです
STLの中身を見ていたら上記のような疑問が山ほど出てきて一人で1000レス行きそうな勢いなので
素直に「プログラミング言語C++第3版 」で勉強してきます

889 名前:デフォルトの名無しさん :04/10/21 22:57:35
class Widget{ ... };
bool f( const Widget& w ){ ... }

int main(){
    std::vector<Widget> v;
    std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun( &f ) ) ); //1
    return 0;
}

1で、
error C2529: '_Left' : 参照への参照は無効です。
warning C4181: 参照型に適用された修飾子は無視されました。

とエラーが出てしまいます。どうすればうまくいきますでしょうか…?
コンテナを vector<Widget*> にして bool f( const Widget* w ) にすれば
ちゃんと動いたのですが、こうするしか解決方法はありませんでしょうか?

890 名前:デフォルトの名無しさん :04/10/21 23:05:12
そこでboostですよ

891 名前:デフォルトの名無しさん :04/10/21 23:06:15
そこでるbyですよ。

892 名前:デフォルトの名無しさん :04/10/21 23:08:04
>>889
fを関数オブジェクトに変えてmem_fun_refでいいんじゃいないの?

893 名前:デフォルトの名無しさん :04/10/21 23:11:12
>889
> std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun( &f ) ) ); //1

std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun<Widget>( &f ) ) );

これで通りませんか?試してないのでもし通らなかったらごめんなさい.
#reference to reference問題は良いい加減修正して( ゚д゚)ホスィ…

894 名前:893 :04/10/21 23:13:46
std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun<const Widget>( &f ) ) );

の方が適切です.すいません.

895 名前:デフォルトの名無しさん :04/10/21 23:20:41
>>894
レスありがとうございます
しかし
error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result> std::ptr_fun(_Result (__cdecl *)(_Arg1,_Arg2))' : 'T3 (__cdecl *)(const Widget,T2) 用のテンプレート引数を 'bool (__cdecl *)(Widget &)' から減少できませんでした。
error C2784: 'std::pointer_to_unary_function<_Arg,_Result> std::ptr_fun(_Result (__cdecl *)(_Arg))' : 'T2 (__cdecl *)(const Widget) 用のテンプレート引数を 'bool (__cdecl *)(Widget &)' から減少できませんでした。
となってしまいます…

896 名前:デフォルトの名無しさん :04/10/21 23:22:17
すいません.893, 894は誤りです.無視してください.
892さんが書いているようにfをファンクタにするのが良いと思います.
(mem_fun_refはいらないような?)

897 名前:デフォルトの名無しさん :04/10/21 23:29:38
つまり
struct Hoge : std::unary_function<Widget, bool>
{ bool operator ()( const Widget& w ) const{ return false; } };
std::find_if( v1.begin(), v1.end(), Hoge() );
ということでしょうか…?

関数ではダメですか…

898 名前:デフォルトの名無しさん :04/10/21 23:55:44
>>897
もし失望されているようならboostというライブラリを一度見てみることをお勧めします.
functionalというライブラリに改善されたファンクタアダプタがあります.
http://boost.cppll.jp/HEAD/libs/functional/negators.html

899 名前:デフォルトの名無しさん :04/10/22 00:38:37
>>874 実行したら3行目エラーでたよ

900 名前:デフォルトの名無しさん :04/10/22 00:41:25
boostってソースしか参考にしていない…
実際に使うには標準じゃないし。。。

901 名前:デフォルトの名無しさん :04/10/22 00:50:09
>>900
ばっかでーーー。
自分で使う範囲では標準など気にする必要などない。
第一、会社によってSTLすら使わせてくれない
ところがあるそうじゃないですか?俺はプログラマーじゃないから詳しくはないけど。

902 名前:デフォルトの名無しさん :04/10/22 01:03:55
try〜catchの形式で一般的なものは、次のうちどちらですか?
理由も合わせて述べて下さい。

■パターンA
int hoge() {
try {
int a = 0;
a = 1;
return a;
} catch(...) {
throw;
}
}

■パターンB
int hoge() {

int a = 0;

try {
a = 1;
} catch(...) {
throw;
}
return a;
}



903 名前:大学生 :04/10/22 01:20:37
どうしてもエラーがでるので教えてください

class Concept{
public:
vector<int> number;
double* ave_signal;
}

class GSG{
public:
vector<Concept> m_VecConcept;
int m_length;
};

void Concept::Concept(int length){
ave_signal = new double[length * sizeof(double)];
memset(ave_signal, 0x00, length * sizeof(double));
}

904 名前:大学生 :04/10/22 01:21:20
のようにクラスを作っておいて、

void GSG::func(){
if (flag){
Concept *pCon = new Concept(m_length);
m_VecConcept.push_back(*pCon);
delete pCon;
}
}

ってやると、コンパイラは通るのですが実行時に
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
ってエラーが出てプログラムが強制終了してしまいます。
それもm_lengthが3の時は普通に動いて8のときは死にます。
VC6.0のMFC使ってやっているのですがここで詰まってしまいました。
分かる方教えてくださいまし。

905 名前:デフォルトの名無しさん :04/10/22 01:27:41
>902
例外を投げる場所と、catch節の処理内容によるのでは。
この例ではどちらもないので、AもBも変わらないと思います。

906 名前:デフォルトの名無しさん :04/10/22 01:28:05
>>904
取り敢えず、Concept::ave_signalのdeleteをしていないことと
要素数がlength * sizeof(double)なのは変だろうってことと
なんでmemset()するんだかってことが気になった。

907 名前:デフォルトの名無しさん :04/10/22 01:33:27
>>904
Conceptにコピーコンストラクタ書いてないとか?

908 名前:デフォルトの名無しさん :04/10/22 02:14:44
C++の見積もりって皆さんどうしてますか?

私は、C言語の場合だと、行数1000行ごとに1日コーディングと見積もりしています。

で、C++の場合は、この方法が使えないと、何かの本で読んだもので・・・



909 名前:デフォルトの名無しさん :04/10/22 02:27:10
つーか、Cでも行数で単価出すなんて阿呆の仕業じゃあるまいし。

910 名前:デフォルトの名無しさん :04/10/22 03:47:16
>>908
機能やモジュール単位で細かく分けて、
更に、設計、製造、デバッグ、、、とかって工程ごとに
数字を出して計算してるけどなぁ。
特にC++だからって特別なことはしていない。
その時点で行数がわかるって、
見積もった時点で詳細設計終わってるわけではないでしょw
実際にはそうきっちりいくわけではないんだけど、
クライアントを納得させるにはそれが一番わかりやすいんで。
これっていまどきでは古い?


911 名前:デフォルトの名無しさん :04/10/22 09:42:38
>>909みたいな香具師は家でプログラミングしてる変体ヲタだと思う
>>908
うちもおおよそそんな感じですよ

912 名前:デフォルトの名無しさん :04/10/22 13:03:25
行数が出てる時点で作成はほぼ完了してるように思えるが・・・。
モジュール単位の細分化もそんなことができている時点で作成は終わっていると考えられる。
そのとおりに行うコーディングなんかすぐにでも終わるし、
実際はデバッグとテストというどれだけかかるか計算できない部分だけが残る。

913 名前:デフォルトの名無しさん :04/10/22 15:32:40
デバッグとテストで全工程の3分の1ぐらいは確保するかな。
そのくらい絶対かかりそうだもの。

914 名前:デフォルトの名無しさん :04/10/22 15:34:03
皆さんに聞きますが、実は裏工程として、
わがままな客の仕様変更の分も
工数に見えない形で入れちゃったりしてるの?

915 名前:デフォルトの名無しさん :04/10/22 16:16:04
>>914
ケースバイケース。設計をやり直さなければ対応できないほどひどい仕様変更を
申しつけられた時ははっきり「別料金です」と言っている。

916 名前:アマグラマ :04/10/22 16:24:05
ていうか一日1000行も書くの?サイズは20KBくらいですかね。
すごいですね。絶対俺には無理だ

917 名前:デフォルトの名無しさん :04/10/22 16:27:34
コピペすれば1000行なんてすぐだよ

918 名前:デフォルトの名無しさん :04/10/22 16:58:28
行単位で見積もりが常識なの?
その方法以外で見積もりしてる会社とかないのかな

あまりに理不尽だなぁって思ったとある学生より

919 名前:デフォルトの名無しさん :04/10/22 17:00:27
見積もりなんざしねぇ

920 名前:デフォルトの名無しさん :04/10/22 17:22:30
>>902
両方とも try ブロックの中で例外が発生する可能性がないので
try~catch を書く必要がありません。


921 名前:デフォルトの名無しさん :04/10/22 17:46:49
毎日1日1000行書き続けられたらすばらしいが
漏れの場合、2000〜3000行位一気に書いてしまうタイプだ。

でも、前後に頭の中で組み立てたり、書き終わってから見直したり、デバッグしたり、
その間に書き直しのために数100行削除とかあったりするから
平均すると100〜200行/日くらいになるかも、、、

922 名前:デフォルトの名無しさん :04/10/22 18:08:41
プログラムは1日1行まで

923 名前:デフォルトの名無しさん :04/10/22 18:10:48
今のプロジェクトで俺が書いたソースファイルが合計2.7MB。
大体36KBあたり1000行のようなので、行数に換算するとおよそ75000行。
工期が約150営業日だったので一日あたり大体500行らすい。
もっとも、俺はコーディングより画面デザインやアイコンの作成にかなり時間割いたので、
コーディングメインのやつならもっと多く書いてるかと。

924 名前:デフォルトの名無しさん :04/10/22 18:11:22
設計がちゃんとできていたら3000行とか書けるよね。

925 名前:デフォルトの名無しさん :04/10/22 18:16:18
して、行単位以外で見積もってる会社は…?

やっぱまずありえないのかな
まぁどんなにすばらしいソース書いたところで
技術者同士にしか評価できないから難しいんだろうけど

926 名前:デフォルトの名無しさん :04/10/22 18:25:41
クソな設計を無理矢理押しつけてくるやつには耐えるしかないのか つД`)・゚・
ていうかだんだん話題がマ板化してるぞ

927 名前:923 :04/10/22 18:25:46
別フォルダに入れてた500Kを計算し忘れた。
一日平均600行くらいに訂正します。

928 名前:デフォルトの名無しさん :04/10/22 18:38:19
>>926
早く設計するほうの人間になってください

929 名前:デフォルトの名無しさん :04/10/22 18:45:05
何行ぐらいになるかなんかよく解かるね

930 名前:909 :04/10/22 18:47:34
鼬害になるから詳細は省略するが、提案書(或いは要求仕様書)の段階で
おおよその画面枚数と処理の複雑さや取り扱う入出力の種類、制作の
困難さなどから見積もりを概算している。
相手によって、営業が上乗せすることもあれば勉強することもあるし、
詳細設計に入っていく過程で見積もり直すこともしばしば。
或いは掛かった工数そのまま請求することもないではない。
いずれにしても、コメントで行数ぐような無様な真似はしない。

931 名前:大学生 :04/10/22 19:37:04
いろいろdeleteしたら動きました。
回答してくれたみなさんありがとうございました。

932 名前:デフォルトの名無しさん :04/10/22 20:44:09
>>918
> 行単位で見積もりが常識なの?
んなわけない。

933 名前:デフォルトの名無しさん :04/10/22 20:45:07
すみません。今日は3行しか書きませんでした。

934 名前:デフォルトの名無しさん :04/10/22 23:12:37
行数による工数判断があるから、
悪徳PGによる安易なコピペ作業がなくならないのかもな。

935 名前:デフォルトの名無しさん :04/10/23 00:16:42
発注する側に常に(まともな)SEがいればそういう悪徳業者は減る

のかな…?

936 名前:デフォルトの名無しさん :04/10/23 00:20:07
最初は簡単そうなシステムで見積もらせといて
後からどんどん肥大化してくのは止めてほすぃ・・・

937 名前:デフォルトの名無しさん :04/10/23 00:21:22
>>935
前提が間違っていればどのような結論であってもその命題は真。

938 名前:デフォルトの名無しさん :04/10/23 00:23:32
3枚くらいの画面デザイン見せられて、安心して見積もったら
実はその画面がタブページありのポップアップだらけでしかも、
データによってデザインを大きく変えないといけないなんてこともあったなぁ。

939 名前:デフォルトの名無しさん :04/10/23 00:30:15
クラステンプレートの第一引数をデフォルト引数にするような、
テンプレートクラスはどうやって書けばいいでしょうか?
template<class T = char> class my_string{
...
}
とすると
my_string<char> aaa;は上手く行きますが、
my_string bbb;
ではエラーが出ます。


940 名前:デフォルトの名無しさん :04/10/23 00:31:40
>>939
my_string<> bbb;

941 名前:デフォルトの名無しさん :04/10/23 00:36:57
>>940
ありがとうございます。でも
my_string bbb;
で通るような、クラステンプレートの書き方を知りたいのです。

942 名前:デフォルトの名無しさん :04/10/23 00:39:08
>>941
template<class T = char> class my_stringT{
...
};

typedef my_stringT<> my_string;

my_string bbb;

943 名前:デフォルトの名無しさん :04/10/23 01:49:42
std::clogのリダイレクト機能を使ってログ取りをしようとしているのですが、main関数内で

 std::ofstream logfile("something.log");
 if(logfile) std::clog.rdbuf( logfile.rdbuf() );

 clog << いろいろ・・・

とすると一通り正常に実行された後なぜかプログラム終了時にクラッシュしてしまいます。
いろいろ調べたところlogfileがグローバル変数の時はクラッシュしないと分かりました。
logfileの生存期間ってもしかしてプログラム終了までないとダメなんですか・・・?
ちなみに環境はWindows上でminGW+STLportです。


944 名前:デフォルトの名無しさん :04/10/23 01:51:50
STLportの使用を止める

945 名前:デフォルトの名無しさん :04/10/23 02:00:39
>>943
logfileのデストラクトでそのstreambufを破棄。
std::clogのデストラクトで↑と同じstreambufを破棄しようとしてクラッシュ。
ってことかな?

946 名前:デフォルトの名無しさん :04/10/23 04:20:09
Modern C++ Design であった、
template <bool> struct CompileTimeChecker{ CompileTimeChecker( ... ); };
template <> struct CompileTimeChecker<false>{};
#define STATIC_CHECK( expr, msg ) { class ERROR_##msg{}; (void)sizeof( CompileTimeChecker<(expr)!=0>( ( ERROR_##msg() ) ) ); }
の STATIC_CHECK マクロを VC7.1 で使ってみたところ、

error C2066: 関数型へのキャストが正しくありません。
error C2070: 'CompileTimeChecker<false> (main::ERROR_TEST (__cdecl *)(void))': sizeof オペランドが正しくありません。

とエラーが出てしまいました。これは VC の方が間違いなのでしょうか?

947 名前:デフォルトの名無しさん :04/10/23 07:18:55
テキストで書いた数値ファイル

10
20
30

を読み込むにはどのようにしたらよいでしょうか?

948 名前:デフォルトの名無しさん :04/10/23 07:24:16
std::ifstream hoge("hoge.txt");
int temp;
while(hoge >> temp)
{
    // なんちゃらかんちゃら
}

949 名前:デフォルトの名無しさん :04/10/23 08:26:50
>>946
ERROR_##msg() のところがコンストラクタ呼び出しとみなされない
みたいだねえ。
とりあえず
ERROR_##msg() → new ERROR_##msg
にしとけばいい


950 名前:デフォルトの名無しさん :04/10/23 08:32:42
>>946
だってfalse指定してるじゃん。

951 名前:949 :04/10/23 11:42:46
>>950
VCだとtrue時も掲示エラー出る
false時に本来出て欲しいエラーメセージは
ERROR_TEST' から 'CompileTimeChecker<false>' に変換できません
てなやつ

952 名前:デフォルトの名無しさん :04/10/23 12:13:17
sizeof に () がついているのでVC++は()内を優先的に型として判断しようとする。
CompileTimeChecker<(expr)!=0>( ( ERROR_##msg() ) )
は、
CompileTimeChecker<(expr)!=0> を戻り値とし、
引数を持たない ERROR_##msg という関数のプロトタイプなので、
そのサイズを取得しようとするが、
ERROR#msg はすでに class として定義されているので、エラーになる。

VC++の挙動が正しいかと。
sizeof の () をはずせばエラーは出なくなる。

953 名前:デフォルトの名無しさん :04/10/23 12:35:58
>>951
あっ。本当だね。
でも、newだとメモリーリークを起こさない?
ようするに原因はERROR_##msg()を関数と認識するみたいだから
#define STATIC_CHECK( expr, msg ) \
{ class ERROR_##msg{}; \
(void)sizeof( CompileTimeChecker<(expr)!=0>(static_cast<ERROR_##msg&>(ERROR_##msg())) ); } /**/
キャストしてやればいいだけみたい。

954 名前:デフォルトの名無しさん :04/10/23 12:37:21
なんかかぶった。

955 名前:949 :04/10/23 13:19:13
>>952
sizeof の () のあるなしについて勉強になりました!
>>953
話は952で終わってはいるが、sizeof内の式は実行時の評価対象では
ないからメモリアロケート自体実行されず、当然リークも起こさない。

956 名前:かめびと :04/10/23 16:49:47
STLのmapを使っていて問題が出ました。

map<char*, int> mymap;
mymap["ABC"] = 0;

char* tmp = strdup("ABC");

printf("%d\n", mymap["ABC"]); // --> ok
printf("%d\n", mymap[tmp]); // --> 駄目

char*の先頭アドレスじゃなくて中身で対応させるには
どうしたらいいんでしょうか?

957 名前:デフォルトの名無しさん :04/10/23 16:55:16
std::stringを持たせる。

958 名前:デフォルトの名無しさん :04/10/23 16:58:33
あ、そうそう。それからstrdup()は標準関数じゃないから、
あまりお使いなさるな。

959 名前:かめびと :04/10/23 17:01:52
なるほど。string使えばいいのか。
C++のライブラリあまり使ったことがないので盲点でした。
strdupも控えます。
ありがとうございますm(_ _)m

960 名前:デフォルトの名無しさん :04/10/23 17:24:28
質問です。
C++の設計について、詳しく説明してるサイトって無いですか?

961 名前:デフォルトの名無しさん :04/10/23 17:31:59
質問が漠然としすぎ

962 名前:デフォルトの名無しさん :04/10/23 17:34:54
>>960
こうすればいいっていうような設計法の定石というのは無いのでそういった
ページはまれだと思うけれど、強いていうならデザインパターンかな。
設計のテンプレートのようなもの。
デザインパターンでググってみればいくつかサイトが見付かると思うよ。

963 名前:デフォルトの名無しさん :04/10/23 17:46:21
>>961
自分の中でも漠然としてるというか・・・
設計してコーディングしてると、どこか間違ってたり、もっといい設計が有るように思うんで
設計そのものについて詳しく勉強してみようかなと。

>>962
ありがとう。ググってみます。

964 名前:デフォルトの名無しさん :04/10/23 17:55:31
unstrdup がないんだよな。
なんで標準から洩れたかよくわかる。

965 名前:デフォルトの名無しさん :04/10/23 18:04:21
>>963
EffectiveC++位読んでおこう。

966 名前:デフォルトの名無しさん :04/10/23 18:32:54
>>963
Bjarne の言葉を忘れるな
>言語はそれを使う人が何を考えることができるかを決めてしまう

言語に限ったことじゃない
デザインパターンでも同じこと
とにかく、色々やれ

967 名前:デフォルトの名無しさん :04/10/23 18:34:51
禿と呼べ

968 名前:デフォルトの名無しさん :04/10/23 18:36:26
失礼、忘れてた

969 名前:デフォルトの名無しさん :04/10/23 18:37:25
禿鷹YBBホークスのコーチになってほしい。

970 名前:デフォルトの名無しさん :04/10/23 19:35:28
BCB の __closure って、
標準 C++ でエミュレートしようとすればどうなるの?

971 名前:デフォルトの名無しさん :04/10/23 19:44:16
>>970
Rubyを使ってください。

972 名前:デフォルトの名無しさん :04/10/23 19:46:07
>>971
馬鹿はだまってろ

では分かる人お願いします

973 名前:デフォルトの名無しさん :04/10/23 19:47:11
馬鹿差別反対

974 名前:デフォルトの名無しさん :04/10/23 19:54:42
>>972
関数オブジェクトを使ってください。

975 名前:デフォルトの名無しさん :04/10/23 19:56:41
>>973
禿しく笑わせて頂きました

976 名前:デフォルトの名無しさん :04/10/23 19:59:43
>>970
staticにして引数にthisポインタ加えればいけるんでない?

977 名前:デフォルトの名無しさん :04/10/23 19:59:49
>>970
手っ取り早くするならboost::bind使う

978 名前:デフォルトの名無しさん :04/10/23 20:32:55
次スレは?
ないなら>>979が立てるけど。

979 名前:デフォルトの名無しさん :04/10/23 23:16:43
すみません、教えてください。

int を char にキャストするオペレータを
オーバーロードすることってできますか?

operator char( int p ) {...}

とか書くと
error: `operator char(int)' must be a nonstatic member function
って怒られちゃいます。
環境は g++ 3.3 です。よろしく!

あ、すみませんが、うちからスレ建てられないんで、
978 さん、よろしくおねがいします。

980 名前:デフォルトの名無しさん :04/10/23 23:21:11
>>979
int を char にキャストするオペレータなど存在しない。

981 名前:デフォルトの名無しさん :04/10/23 23:24:04
っつか組込型の振る舞いを変えたいってことか?
逝って良し

982 名前:デフォルトの名無しさん :04/10/23 23:27:38
>>979
エラーメッセージに答え書いてあるだろ

983 名前:デフォルトの名無しさん :04/10/23 23:28:09
オペレータのことは忘れて、独自のキャストを作ってみるとか。
template <typename T1, typename T2> T2 my_cast(T1 t) {
return static_cast<T2>(t);
}
template <typename T1> T1 my_cast(int i)
{
return 何か変わったこと(i);
}
int i = 0;
char ch = my_cast<char>(i);


984 名前:デフォルトの名無しさん :04/10/23 23:28:39
おまえもなー

985 名前:デフォルトの名無しさん :04/10/23 23:32:18
>>981,983
既存のソースでこの型変換が行われてるところを検出したいんです。
舌足らずですみません。
>>982
int 型のメンバー関数を定義する方法をご存知だったら教えてくれませんか?
>>980
やっぱりそうなんですか。

986 名前:デフォルトの名無しさん :04/10/23 23:33:10
疑問に思ったので、質問をば

関数Aを可変変数で
void A(LPCSTR fmt, ... );
という風に書いた時
void B(LPCSTR fmt, ... );
という関数内で、A(fmt);みたいな感じで渡せないでしょうか?
試したら無理だったのだが、どうにかして渡せないでしょうか?
どうにかして、proxyパターンで可変変数の関数を委譲させたいのですが………

987 名前:デフォルトの名無しさん :04/10/23 23:34:18
>>986
むりぽ

988 名前:デフォルトの名無しさん :04/10/23 23:36:53
>>986
可変引数の関数を用意するときはちゃんと va_list 版も作る癖をつけれ。
↓こんなヤツ。
void A(LPCSTR fmt, va_list arg_list);
void B(LPCSTR fmt, va_list arg_list);


989 名前:デフォルトの名無しさん :04/10/23 23:39:59
無知な漏れに>>988を詳しく教えて下さい

990 名前:デフォルトの名無しさん :04/10/23 23:41:19
10 レス以内に va_list を説明するスレになりました。


991 名前:デフォルトの名無しさん :04/10/23 23:44:08
va_list 版って何?

992 名前:デフォルトの名無しさん :04/10/23 23:46:27
>>985
人に聞く前にすることがあるだろ
メンバ関数を追加するにあたって必要となるものを列挙してみろ

class a
{
private:
operator char () const;
};

#define int a


993 名前:デフォルトの名無しさん :04/10/23 23:46:36
>>989
こんな感じのサンプルコードでわかる?

ore_printf(const char *format) {
static int count = 0;
print("[%08.8d]", count++);
va_list arg_list;
va_start(arg_list, format);
vprint(format, arg_list);
va_end(arg_list);
print("\n");
}

994 名前:デフォルトの名無しさん :04/10/23 23:52:03
>>985
コンパイラの警告オプションをチェックしてみたら?

995 名前:デフォルトの名無しさん :04/10/23 23:56:16
やばいやばい、次スレ次スレ…

996 名前:デフォルトの名無しさん :04/10/23 23:57:37
>987
ありがとうございます、委譲は楽に書けませんかorz

>988
作ると作らないでは、どのように違うのでしょうか?
コンパイラのチェックとか………?

997 名前:v(^・^)v :04/10/23 23:57:41
まだなら漏れが次スレ建てるから、落ち着いて待ってろ。

998 名前:デフォルトの名無しさん :04/10/24 00:00:32
>>993
わかんねぇ…
vprintf でググってみる

999 名前:デフォルトの名無しさん :04/10/24 00:01:35
999キター

1000 名前:デフォルトの名無しさん :04/10/24 00:02:45
1000!


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.