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


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

C++相談室 part55
751 名前:デフォルトの名無しさん :2007/01/27(土) 22:24:55
>インクルードファイル'iostream'をオープンできない
が全ての原因。
開発環境が絡んでくるので環境依存スレへ

752 名前:デフォルトの名無しさん :2007/01/27(土) 22:25:29
>>750
インクルードパスが通ってない

753 名前:デフォルトの名無しさん :2007/01/27(土) 22:33:10
環境依存スレとは何ですか?

754 名前:デフォルトの名無しさん :2007/01/27(土) 22:49:22
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1169039760/

755 名前:デフォルトの名無しさん :2007/01/27(土) 22:51:18
#include <ostream>
がないな。

いや、出ているエラーの原因とは関係ないが。


756 名前:デフォルトの名無しさん :2007/01/27(土) 23:04:29
754>紹介ありがとうございます。
755>
'bcc32hello.cpp'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されてません。

・・・というのがきました

757 名前:デフォルトの名無しさん :2007/01/27(土) 23:23:43
bcc 使ってるんであれば
それ用の入門者用ページを最初から100回ぐらい見直した方がいいよ。

758 名前:デフォルトの名無しさん :2007/01/27(土) 23:27:08
まさかとは思うが、

bcc32 と hello.cpp の間にスペースを入れてないとか?

759 名前:デフォルトの名無しさん :2007/01/27(土) 23:30:58
>>735
多重継承したときどうするかということ、そして何より自分でtypedefすればすむ(言語仕様に手を加えずにすむ)ということで、
そのような機能は入れなかったとD&Eには書いてある。

760 名前:デフォルトの名無しさん :2007/01/28(日) 00:56:38
>>747
意味が分かりません

761 名前:デフォルトの名無しさん :2007/01/28(日) 01:08:52
>>759
VC++には、__superなる独自仕様があるんだよな。
しかし、個人的にはいらない。明示的にベースクラスを修飾するほうが分かりやすい。
曖昧にもならないし。
MSのVC開発チームもなぜこんな仕様を盛り込んだのか。

762 名前:デフォルトの名無しさん :2007/01/28(日) 02:10:46
__int64って普通に使ってもおk?

763 名前:デフォルトの名無しさん :2007/01/28(日) 02:36:18
>>762
適当な名前にtypedefしてからならOK

764 名前:デフォルトの名無しさん :2007/01/28(日) 09:30:25
>>762
boost::int64_t

765 名前:デフォルトの名無しさん :2007/01/28(日) 10:31:47
>>762
VC++ 7.1 (.NET 2003)以降ならlong longが使える。
その他のコンパイラで、Boostが嫌なら、<windows.h>のLONGLONGもしくはINT64がある。

766 名前:デフォルトの名無しさん :2007/01/28(日) 10:40:03
クラスにoperator()(operator+()などではない)定義って具体的にどういうことができるの?

767 名前:デフォルトの名無しさん :2007/01/28(日) 10:44:12
>>766 std::less みたいなこと。

768 名前:デフォルトの名無しさん :2007/01/28(日) 10:51:22
C++ってあそこまで難しくややこしくある必要性ってなんですか?

769 名前:デフォルトの名無しさん :2007/01/28(日) 10:54:06
>>768
実行時コストを最小にして高レベルプログラミングを実現する目的があったからです。

770 名前:デフォルトの名無しさん :2007/01/28(日) 10:55:46
>>766
関数と同じことが出来る。
ただコールバックとして呼び出すような場合
関数ポインタを渡すのと違いインライン化できるので
関数呼び出しのオーバーヘッドが無くて高速化できる。
典型的な例がqsortとstd::sortの違い。

あとは関数内にインナー関数のように定義できるとかそんなところか。


771 名前:デフォルトの名無しさん :2007/01/28(日) 11:30:34
>>768
Cとの互換性をできるだけ確保する必要があったということも多分あると思う。

772 名前:デフォルトの名無しさん :2007/01/28(日) 12:24:44
wchar_t
の_tってどんな意味ですか?

773 名前:デフォルトの名無しさん :2007/01/28(日) 12:29:21
>>772
禿に聞いてくれ。
といっても、ワイド文字あたりの仕様を考えたのは、禿じゃないだろうけど。
たしか禿も、7bit文字圏の人だし。

Wide Character Typeってところじゃないの。せいぜい。

774 名前:デフォルトの名無しさん :2007/01/28(日) 12:34:19
禿って誰ジャーーー??

775 名前:デフォルトの名無しさん :2007/01/28(日) 12:48:07
>>774 >>2

776 名前:デフォルトの名無しさん :2007/01/28(日) 13:01:12
_を入力するのがめんどい

777 名前:デフォルトの名無しさん :2007/01/28(日) 13:03:52
>>776
Shift+-が面倒なの?

778 名前:デフォルトの名無しさん :2007/01/28(日) 13:08:50
確かにめんどい

779 名前:デフォルトの名無しさん :2007/01/28(日) 13:09:17
#typedef wchar_t wt

780 名前:デフォルトの名無しさん :2007/01/28(日) 13:16:07
Cの伝統的な習慣に typedef された型に _t と付けるというものがあり
Cで wchar_t は確かにtypedefed typeだったが
C++では予約語になった

という歴史的経緯

781 名前:デフォルトの名無しさん :2007/01/28(日) 15:34:24
>>779
#はいらないだろ

782 名前:デフォルトの名無しさん :2007/01/28(日) 15:46:21
>>782はいらないだろ

783 名前:デフォルトの名無しさん :2007/01/28(日) 15:48:04
>>782はいるよ

784 名前:デフォルトの名無しさん :2007/01/28(日) 15:52:25
いらねーよw

785 名前:デフォルトの名無しさん :2007/01/28(日) 15:54:14
いるのに(´・ω・`)

786 名前:デフォルトの名無しさん :2007/01/28(日) 16:06:40
いれるぞ、うっ

787 名前:デフォルトの名無しさん :2007/01/28(日) 16:14:06
>>782はいないよ

788 名前:デフォルトの名無しさん :2007/01/28(日) 16:32:33
30分も経たないうちに死んでしまったのか...。

789 名前:デフォルトの名無しさん :2007/01/28(日) 16:36:18
↓こういう関数は定義できませんよね。
foo( const Bar & object, int arg = object.Something() );
できたらいいなあと思うんですが。

790 名前:デフォルトの名無しさん :2007/01/28(日) 16:48:55
>>789
戻り値の型がありません。

791 名前:デフォルトの名無しさん :2007/01/28(日) 16:51:05
>>789
T foo( const Bar & object, int arg );
inline T foo( const Bar & object ) { return foo(object, object.Something()); }

792 名前:デフォルトの名無しさん :2007/01/28(日) 16:55:23
オーバーロードしたら終わりですやん。

793 名前:デフォルトの名無しさん :2007/01/28(日) 16:57:34
>>790
すみません。忘れていました。

>>791
ありがとうございます。
でもデフォルト引数が増えていくと定義も増えるので
それで少し面倒かなと思いまして。
T foo( const Bar & object, int arg1 = object.get1(), int arg2 = object.get2(), int arg3 = (以下略
面倒がらずに書いていきたいと思っております…。

794 名前:デフォルトの名無しさん :2007/01/28(日) 17:07:14
クラスの継承について質問させていただきます。

[問題]
class A
{
a;
aa;
};

class B
{
b;
bb;
};

class B1 : public B{};
class B2 : public B{};
class B3 : public B{};
...

ここで、A, B, B1, B2, B3,...のメンバ
a, aa, B1.b, B1.bb, B2.b, B2.bb,...
を全て継承しているクラスSumを定義したい。
このとき、Sumはどのように書けばよいのでしょうか?
非常に低次元な内容で申し訳ありません。

795 名前:デフォルトの名無しさん :2007/01/28(日) 17:09:57
設計見直して振る舞い分けた方がよくないか?

796 名前:デフォルトの名無しさん :2007/01/28(日) 17:10:36
すまん795は793宛


797 名前:デフォルトの名無しさん :2007/01/28(日) 17:20:12
>>794 class Sum : public A, B1, B2, B3 {}; でいいかな?

798 名前:デフォルトの名無しさん :2007/01/28(日) 17:29:26
>>795
そうですね、一つにまとめる振る舞いは良くないかもしれません…。
設計も見直してみたいと思います。

799 名前:デフォルトの名無しさん :2007/01/28(日) 17:29:36
>>797
仮想継承しないと曖昧エラーが出るような希ガス

800 名前:デフォルトの名無しさん :2007/01/28(日) 17:37:21
>>797
その場合、Sumのインスタンスに対して、例えばB1.bとB2.bを区別するにはどうすればいいですか?
Sum obj;
Sum.B1.b
などではうまくいかないようですが
>>799
詳しく教えてくれませんか?

801 名前:デフォルトの名無しさん :2007/01/28(日) 17:37:36
Sumで b と bb を使おうとすると曖昧ですって言われるね。

802 名前:794=800 :2007/01/28(日) 17:39:09
書き忘れましたが、794=800です。
あと、細かいことですが>>800
Sum obj;
obj.B1.b;
でした。どっちにせよあてずっぽうで書いたものなのでどうでもよいですが。

803 名前:デフォルトの名無しさん :2007/01/28(日) 17:41:36
>>800
class B1 : virtual public B {}
........
のように書けば、Bの実体は一つに絞られ曖昧エラーは出ない。

また、仮想継承を使いたくない時は

Sum::B1::b のように限定すれば、B1、B2、B3毎にBの実体が
作られているので、曖昧を回避する事ができる。

804 名前:デフォルトの名無しさん :2007/01/28(日) 17:42:48
sum.B1::b

805 名前:デフォルトの名無しさん :2007/01/28(日) 17:43:28
菱形継承コワイコワイ

806 名前:デフォルトの名無しさん :2007/01/28(日) 17:46:55
あと当然だが、class Sum ではデフォルトがprivateになって
いるため、
public:
using B::b;
などとしてpublicに引っ張り出さないと、クラス外からアクセス
できない。

807 名前:デフォルトの名無しさん :2007/01/28(日) 18:13:43
おっとっとごめん
class Sum : public A, public B1, public B2, public B3
とやれば using は不要だわな
それにしてもこの多重継承のパズルはいつ見ても嫌だ

808 名前:デフォルトの名無しさん :2007/01/28(日) 18:17:41
class B { int b; };
class C : public B {};
class D : public B, public C {};

とやってしまうと、Dの基底クラスBに曖昧さなしでアクセスする
事は不可能になってしまうね。大抵のコンパイラでは警告が
出るようだけど。

809 名前:794 :2007/01/28(日) 18:24:39
お教えいただいたことを自分なりに解釈して、次のようなコードを書くことで
B1.bをメンバとして持つクラスSumを定義し、かつB1.bにSumのメンバ関数からアクセスできるようになりました。
(get、set関数はソース省略、コンパイルして動作確認済み)
これを基本形としてコードを書いてゆくことに、特に問題はなさそうでしょうか?

class A
{
a;
public:
get_a();
set_a();
};

class B
{
b;
public:
get_b();
set_b();
};

class B1 : public B{};
class B2 : public B{};
...

class Sum : public A, public B1, public B2,...{};

obj.B1::set_b();
obj.B1::get_b();

810 名前:794 :2007/01/28(日) 18:26:39
>>806
obj.B1::set_b();
のところで、
error C2247: 'B::b' はアクセスできません。'Sum' は 'private' で 'B1' からの継承で使われています。
とのエラーが出ます。
>>807
>それにしてもこの多重継承のパズルはいつ見ても嫌だ
多重継承の方法はあまりよいやり方ではないということでしょうか?

811 名前:デフォルトの名無しさん :2007/01/28(日) 18:31:37
>>810
class Sum : public B1
のようにpublic継承したら問題はないはず。

多重継承はJavaのような言語にはないのは設計ミスを生じやすい
から取り消されたと聞いているけど、多重継承を使わないと解決
できない問題も存在するのは事実。

ただ他の方法でもできるのに無理に多重継承を使うのはお勧めしない。
訳のわからないエラーに悩まされる事になる。

812 名前:デフォルトの名無しさん :2007/01/28(日) 18:43:31
Bがクラスの場合、

class A : B{

はprivate継承でしたっけ?

813 名前:デフォルトの名無しさん :2007/01/28(日) 19:14:32
まあ、多重継承が面倒な問題を抱えることになるのも事実だが、かといって多重継承がなければ
スマートに解決できない問題というのも確実に存在する。

だからjava系にはinterfaceに限って多重継承を認めてるし、Rubyには限定されたMix-inがあるわけだ。


814 名前:デフォルトの名無しさん :2007/01/28(日) 19:34:14
javaのインターフェース多重継承できないと、
threadを継承した時点で終わるw

815 名前:デフォルトの名無しさん :2007/01/28(日) 21:07:44
>>812
その通り

816 名前:デフォルトの名無しさん :2007/01/28(日) 21:11:09
下記のコードVC2003ならコンパイルできるけど、
2005はできない。i のスコープの解釈の違いによるものだけど、
どっちが正しいんですか?

for(int i=0; i<100;i++)
{
  //do something
}

cout << i ;

817 名前:デフォルトの名無しさん :2007/01/28(日) 21:21:31
>>816
2003でコンパイル出来るとは初耳だ。
VC6でしょ?
2003は何かオプションを付けないとエラーになるだろ。

818 名前:デフォルトの名無しさん :2007/01/28(日) 21:22:25
規格ではコンパイル出来ないのが正しい。
VCは伝統的にそれを破ってたのだが、
VC2005からはデフォルトで規格通りに
振る舞うようになった

819 名前:デフォルトの名無しさん :2007/01/28(日) 21:29:03
>>817
VC6で作ったものをVC2003でそのままコンパイルしたら通りました
で、VC2003でコンパイルしたものを2005でコンパイルしたら×でした。



820 名前:デフォルトの名無しさん :2007/01/28(日) 21:30:34
>>818
ありがとうございます。分かりました。

821 名前:デフォルトの名無しさん :2007/01/28(日) 21:43:03
>817
VC6:コンパイルできる。/Zcでエラーにできるが、Windows.hとかがエラーだしまくるので使えない
VC7:コンパイルできる(規定)。エラーにするオプションもある。
VC8:コンパイルできない(規定)。/Zc:forScope-でコンパイルできる
だったかなたしか。

822 名前:デフォルトの名無しさん :2007/01/28(日) 21:59:05
>>821
なるほど、歴史的な経緯がかいまみれますね。
ありがとうございました。

823 名前:デフォルトの名無しさん :2007/01/28(日) 21:59:30
そうなのか。2003はアンインストールしてるから関係ないけど。
気持ち悪いな。標準C++以前の文法じゃん。

824 名前:デフォルトの名無しさん :2007/01/28(日) 22:23:43
環境依存ネタを続けるのは良くないと思うが一言だけ
VC6でコンパイルするときは
#define for if(0);else for
を宣言しておけ。



825 名前:デフォルトの名無しさん :2007/01/28(日) 23:26:47
>>824
使う機会はまずないと思うが、何故?

826 名前:デフォルトの名無しさん :2007/01/28(日) 23:30:11
いまだVC6使ってる俺

827 名前:デフォルトの名無しさん :2007/01/28(日) 23:40:23
>>825
string使ってるなら気をつけなよ
マルチプロセッサマシンで死ぬから

828 名前:デフォルトの名無しさん :2007/01/28(日) 23:45:03
>>825
C++標準に合わせてfor文の中の変数のスコープを制限するため。
そもそも>>816みたいなことが出来ちゃうこと自体が変。

http://www.fides.dti.ne.jp/~oka-t/vc-mfc.html#quirks


829 名前:デフォルトの名無しさん :2007/01/29(月) 00:26:49
別に変じゃないだろ。

830 名前:デフォルトの名無しさん :2007/01/29(月) 01:07:39
変。標準C++ではできないはずなんだもん。

831 名前:デフォルトの名無しさん :2007/01/29(月) 01:11:55
>>763
何でtypedefするひつようがありますか?

832 名前:デフォルトの名無しさん :2007/01/29(月) 01:12:06
よくわかりませんが、VC6だと

{
  MyClass c;
  c.DoSomething();
}

のように、敢えてブロックで囲って、デストラクタを呼び出させることはできないということですか?

833 名前:デフォルトの名無しさん :2007/01/29(月) 01:15:11
>>832
は?何言ってんの?馬鹿?

834 名前:デフォルトの名無しさん :2007/01/29(月) 01:17:25
馬鹿です

835 名前:デフォルトの名無しさん :2007/01/29(月) 01:23:52
>>831
環境依存依存の型名なので、他の環境に移植した場合最小限の修正で済むように。

836 名前:デフォルトの名無しさん :2007/01/29(月) 01:36:22
>>832

VC6,2003だと
for(int i=0 ....)
{ }
のiがforループのブロックの外にもスコープを持つ

2005だと持たない。

あくまでfor文の話

837 名前:デフォルトの名無しさん :2007/01/29(月) 06:40:03
>>830
変じゃない。VC6の頃は標準C++自体が策定段階で、仕様が過渡期だった。

838 名前:デフォルトの名無しさん :2007/01/29(月) 06:42:15
>>837
その頃の話をしてるんじゃない。今の話をしている。

839 名前:デフォルトの名無しさん :2007/01/29(月) 07:50:34
元質は、VC6は変か? じゃないの?

まぁいいや。
・VC6は当時の事情によりそうなっていたが、今となっては変。
・VC6を使うなら、>824のような対策をとることお勧め。
ってことで。

840 名前:デフォルトの名無しさん :2007/01/29(月) 09:00:08
VC6が変なのではなく、VC6を使い続けているのにその仕様に文句を言うやつの方が変なんだろ。

841 名前:デフォルトの名無しさん :2007/01/29(月) 10:02:05
つまりVC2005買えと言ってんの?

842 名前:デフォルトの名無しさん :2007/01/29(月) 10:02:33
つ Express

843 名前:デフォルトの名無しさん :2007/01/29(月) 10:07:27
>>842
MFCなくてもGUI作れる?


844 名前:デフォルトの名無しさん :2007/01/29(月) 10:13:45
最近はMFCがないとGUIのアプリ作れないと思ってる人がいるんだね

845 名前:デフォルトの名無しさん :2007/01/29(月) 11:03:54
VC6を持っているなら、2005で6のMFCを使えばいいんでないの?
つーか、スレ違いだがね。

846 名前:デフォルトの名無しさん :2007/01/29(月) 11:04:37
ライセンス的にどーなのよ、それ。

847 名前:デフォルトの名無しさん :2007/01/29(月) 12:37:09
>>846
なんか問題あるか?


848 名前:デフォルトの名無しさん :2007/01/29(月) 12:43:38
質問者に質問者と同じ質問をぶつけるなよ

849 名前:デフォルトの名無しさん :2007/01/29(月) 14:25:53
>>843
MFC使うくらいなら、↓使えよ。

http://www.torjo.com/win32gui/


850 名前:デフォルトの名無しさん :2007/01/29(月) 14:31:38
>>848
いや、スマン、疑問に思う根底の部分に何か思い当たる部分があるのか聞きたかっただけ。


851 名前:デフォルトの名無しさん :2007/01/29(月) 17:43:58
adobeが汎用のGUIライブラリー作ってなかった?


852 名前:デフォルトの名無しさん :2007/01/29(月) 17:47:57
kwsk


853 名前:デフォルトの名無しさん :2007/01/29(月) 17:55:36
http://sourceforge.net/projects/adobe-source/

854 名前:デフォルトの名無しさん :2007/01/29(月) 19:12:00
wxWidgetsのことも思い出してやって下さい

855 名前:デフォルトの名無しさん :2007/01/29(月) 19:15:27
>>853
期待ageなライブラリだな

856 名前:デフォルトの名無しさん :2007/01/29(月) 20:32:16
Qtもあるでよ

857 名前:デフォルトの名無しさん :2007/01/29(月) 21:06:03
GUIリソースをマウスでチョイチョイっと作れるのはVCじゃないと無理じゃね?

858 名前:デフォルトの名無しさん :2007/01/29(月) 21:24:43
あのお、低レベルな質問ですいません。
クラスXの入力イテレータを受け取りたいんですが
どう書いたらよいでしょうか。

int Uketorimasu(InputIterator<X> kokokara,InputIterator<X> kokomade)
コンパイラがエラーになってます??

859 名前:デフォルトの名無しさん :2007/01/29(月) 21:31:25
intとかの数値をstringに変換してそのまま関数の引数に渡してやりたいのですが、
一番簡単なやりかたってなんですか? 
stringstreamも_ltoa_sも2,3行必要なので、なんかやりづらい
自分で変換関数を作るのが良いですか?

860 名前:デフォルトの名無しさん :2007/01/29(月) 21:33:20
boost::lexical_cast

861 名前:デフォルトの名無しさん :2007/01/29(月) 21:41:20
boostおいらも使いたいんだけど、
メンバーで知ってる人いないから使いづらい。。
共有のソースだし

862 名前:デフォルトの名無しさん :2007/01/29(月) 21:46:57
と思ったけど、ちょっと提案してみますboost

863 名前:デフォルトの名無しさん :2007/01/29(月) 21:52:12
おいらはstd::stringを返すstrprintfとか作った。
FILE *fp=fopen( stdprintf("%d.txt",i).c_str(), "rb");
とか書けて幸せだが、実装に要したコストを考えると微妙。

864 名前:デフォルトの名無しさん :2007/01/29(月) 22:02:47
>>858
template<typename InputIterator>
int Uketorimasu(InputIterator kokokara, InputIterator kokomade)

>>863
文字列の長さを知る方法があれば、それを元にvsnrpintfを呼ぶだけだから、大したことはないと思うのだが。
もっとも、boost::formatが似たようなことをやっている。
http://www.kmonos.net/alang/boost/classes/format.html

865 名前:デフォルトの名無しさん :2007/01/29(月) 22:05:18
>>859
その2,3行の関数をinlineでヘッダに書いてやれば
マクロみたいに使えるが


866 名前:デフォルトの名無しさん :2007/01/29(月) 22:09:33
>864
確かに...を使うなら、vsnprintfを呼ぶだけだからたいしたことはない。
%sに10とかstd::stringオブジェクトを突っ込んだりすると即死なのが
我慢できればそれでも良かったかもね。

867 名前:デフォルトの名無しさん :2007/01/29(月) 22:13:41
>>863
俺は思い切ってstd::stringをラップして http://tricklib.com/cxx/dagger/xstring.h を作った。
FILE *fp=fopen(xstring().format("%d.txt",i), "rb"); // .c_str() は不要。
とか書けて幸せ。std::stringの全メンバをオーバーライドしてるんで実装には結構手間がかかった。

868 名前:デフォルトの名無しさん :2007/01/29(月) 22:19:17
メンバ関数に__stdcall等の規約が指定されている関数とかがあるとして、
それを継承して再定義した関数も、implicitな感じで__stdcallになるんですか?

869 名前:デフォルトの名無しさん :2007/01/29(月) 22:24:21
>>868
C++の設計思想的にそれはないハズ。

870 名前:デフォルトの名無しさん :2007/01/29(月) 22:29:13
>>868
それはわからないが、Platform SDKのCOM関係のヘッダでは
全てにいちいちSTDMETHODCALLTYPE(__stdcallと定義されている)を付けている。

871 名前:デフォルトの名無しさん :2007/01/29(月) 22:32:45
少なくともベースクラスでvirtualなメソッドがSTDCALLなら、
その派生もSTDCALLにならざるを得ない。

872 名前:デフォルトの名無しさん :2007/01/29(月) 22:39:39
>>871
いやだから、C++の設計思想的にそれはないだろ。
継承階層が深くなったりしてるときに深い階層にある継承元クラスの定義で
継承先のクラスが影響を受ける訳にはいかない。
仮想関数としてオーバーライドさせたい場合は自分でSTDCALLを
定義せにゃならんハズ。

873 名前:デフォルトの名無しさん :2007/01/29(月) 22:54:55
そのばあい、STDCALLを指定しなければコンパイルエラーとなると思うがどうか。
そうでなければ、その仮想メソッドをどうやって呼び出すというのか。

874 名前:デフォルトの名無しさん :2007/01/29(月) 22:57:42
>>873
継承元クラスのポインタにキャストすりゃ一発だろ。

875 名前:デフォルトの名無しさん :2007/01/29(月) 23:00:54
ほー。へー。で、キャストしてからSTDCALL形式で叩くの?ふーん。

876 名前:デフォルトの名無しさん :2007/01/29(月) 23:12:18
得意気な奴が反論できなくなって敗れ去る瞬間はいつ見てもおかしいが、
その段階で尚、涙目で「何かあるフリ」だけしておこうっていう間違った根性はさらに笑えるかも。

877 名前:デフォルトの名無しさん :2007/01/29(月) 23:15:49
そういう言葉は
class b{
virtual int __stdcall f(){ return 0;}
};
class c : b{
virtual int f(){ return 0;}
}
をコンパイルしてから云ってもらおうか(w

878 名前:デフォルトの名無しさん :2007/01/29(月) 23:22:56
これだとエラーになったけど、こういうことじゃなくて???
エラー E2113 test.cpp 17: 仮想関数 'derived::whoami()' は基本クラス 'base' と矛盾する

#include <iostream>
using namespace std;

class base
{
public:
    virtual void __stdcall whoami()
    {
        cout << "I am base" << endl;
    }
};
class derived : public base
{
public:
    virtual void whoami()
    {
        cout << "I am derived" << endl;
    }
};
int main()
{
    base* b= new derived();
    
    b->whoami();
    
    delete b;
    return 0;
}
    

879 名前:デフォルトの名無しさん :2007/01/29(月) 23:23:47
と、さもまっとうに言い返してるかのような顔で
話とまったく違うコードを出してくる奴w

880 名前:デフォルトの名無しさん :2007/01/29(月) 23:25:10
は???意味が分からん

881 名前:デフォルトの名無しさん :2007/01/29(月) 23:25:19
まさに↓だな
>得意気な奴が反論できなくなって敗れ去る瞬間はいつ見てもおかしいが、
>その段階で尚、涙目で「何かあるフリ」だけしておこうっていう間違った根性はさらに笑えるかも。

882 名前:デフォルトの名無しさん :2007/01/29(月) 23:28:25
どうでもいいけどクラスを宣言したとき
必ず最後の ; を忘れてしまうのは私だけ?

883 名前:デフォルトの名無しさん :2007/01/29(月) 23:30:30
とりあえず、871, 873, 875の勝利。
872,874はいわば負け犬(ルーザー)。
876からの展開は向きが曖昧なので不明

884 名前:デフォルトの名無しさん :2007/01/29(月) 23:32:44
>>872
も最後の2行はあってると思うけど
最初の3行は意味が分からんが

>>874は変だと思うけど

885 名前:デフォルトの名無しさん :2007/01/29(月) 23:34:00
何か珍しく変な人が多いな
いつもはビシッと正解が出るのに

886 名前:デフォルトの名無しさん :2007/01/29(月) 23:34:45
>>負け犬(ルーザー)。 

わざわざ括弧書きで書くとこがかわいい

887 名前:デフォルトの名無しさん :2007/01/29(月) 23:34:46
>>872-874 は同じようなことを違う言葉でいってるようしにか見えんのだが、
そこからなぜ、>>875-876 のような流れになるん?

888 名前:デフォルトの名無しさん :2007/01/29(月) 23:36:22
元は>>871の書き方に問題があるんじゃないかね。
STDCALLにならざるを得ないって、STDCALLを宣言しなくて良いのか
しないといけないのか、どっちにもとれる

889 名前:デフォルトの名無しさん :2007/01/29(月) 23:37:16
>>884
>>>872
>も最後の2行はあってると思うけど
>最初の3行は意味が分からんが

お前、まさか、class 定義内で使う using の理由(←これが
まさにその「最初の3行」)を知らんのか?

890 名前:デフォルトの名無しさん :2007/01/29(月) 23:37:23
どっちかというと、>>871
__stdcallを宣言しなくてもいいって言ってるように見えるけど

891 名前:デフォルトの名無しさん :2007/01/29(月) 23:39:06
>>889
お前、日本語勉強したほうが良いぞ

892 名前:889 :2007/01/29(月) 23:40:40
>>891
読み返してみて、俺もそう思った。ゴミレスすまん。

893 名前:デフォルトの名無しさん :2007/01/29(月) 23:44:16
素直な奴!!!!ワロタ

894 名前:デフォルトの名無しさん :2007/01/29(月) 23:50:47
>>885
正解もなにも、喧嘩してる両者の主張が同じなんですが。

895 名前:デフォルトの名無しさん :2007/01/29(月) 23:53:57
あいまいすぎ

896 名前:デフォルトの名無しさん :2007/01/30(火) 00:11:25
871だけど、>>868からの話(implicitがどうこう)の流れとしては言葉が
足りてなかったかもね。
言いたかったのは要するに>>873で、「STDCALLにせずに呼べるなら
呼んだ時死ぬ」というだけで、explicit/implicitについては言及してない。

>継承階層が深くなったりしてるときに深い階層にある継承元クラスの定義で
>継承先のクラスが影響を受ける訳にはいかない。
について「影響」の範囲にも拠るんだろうけど、virtualな以上影響なしなわけ
ねーということが言いたかった。ついカッとなって書いた。反省している。

897 名前:デフォルトの名無しさん :2007/01/30(火) 00:50:19
うむ。わかればよいのじゃ、わかれば。ハッ、ハッ、ハッ。(何故か偉そう

898 名前:デフォルトの名無しさん :2007/01/30(火) 01:20:34
ついカッとなるようなぼけは
回線切って一酸化炭素を胸一杯吸い込んでこい

899 名前:デフォルトの名無しさん :2007/01/30(火) 04:58:43
>>857
QtにVC用ポトペタプラグインあるでよ

900 名前:デフォルトの名無しさん :2007/01/30(火) 05:45:37
typedefしてintを別名で利用しているのですが、

大量の型名を宣言しているものの、全てintの別名でしかないので、
コンパイラで型チェックされなくてバグの温床になりそうです。

どのように対応するのが一般的なのでしょうか?

901 名前:デフォルトの名無しさん :2007/01/30(火) 06:25:54
>>900
その型をclassにする。enumにするだけでも違うかもしらん。

902 名前:デフォルトの名無しさん :2007/01/30(火) 09:13:18
VC8だとtypedefしたものでも型が違うもの同士と代入したりすると警告が出るyo

903 名前:デフォルトの名無しさん :2007/01/30(火) 10:02:29
>>867
僕は更にトチ狂って、文字列版 boost.bind をコンセプトに
http://naiv.info/werk/kalas_alpha.zip とか作ってたぜ!

FILE * fp = wfopen( sprint(wstring(),_d%L".txt",10).c_str(), "rb" );

spirit 見たいに式を保存できるようにする予定が途中で飽きて、そのままだけど…
しかも、stream のラッパーだから遅いし。



904 名前:デフォルトの名無しさん :2007/01/30(火) 10:11:00
>>900
boostに強いtypedefというか、別の型にしてくれるやつがあった気がするんだが思い出せん。

905 名前:デフォルトの名無しさん :2007/01/30(火) 10:23:54
>>904
ttp://www.boost.org/boost/strong_typedef.hpp

これか?

906 名前:デフォルトの名無しさん :2007/01/30(火) 10:26:56
まんまでワロタ

907 名前:901 :2007/01/30(火) 10:56:24
おお、こんな方法が!

.net2003の環境でint以外の変数もtypedefしているので、
boostを使ってみます、ありがとうございました。

908 名前:デフォルトの名無しさん :2007/01/30(火) 12:05:40
>strong_typedef
RTTIの関係でサイズが肥大化したりしないのかな
最適化の段階で消える?

909 名前:デフォルトの名無しさん :2007/01/30(火) 12:17:04
C++の場合、vtblのないクラスにはRTTIをつける必要はなかったと思うんだが。

910 名前:デフォルトの名無しさん :2007/01/30(火) 14:13:42
auto_ptr を list に入れるとまずいですか?

911 名前:デフォルトの名無しさん :2007/01/30(火) 14:31:02
まずい。

912 名前:910 :2007/01/30(火) 14:36:30
気をつけて使えばまずくないのでは?

913 名前:デフォルトの名無しさん :2007/01/30(火) 14:37:58
もう一杯。

914 名前:デフォルトの名無しさん :2007/01/30(火) 14:59:30
>>912
普通の人が思うようには動作しない、と思って使う分にはいいんじゃないの。
なんの役に立つかは知らないけど。

915 名前:デフォルトの名無しさん :2007/01/30(火) 15:05:26
もうちょいまともに動作する別のクラスを作って使った方がいいと思う。

916 名前:910 :2007/01/30(火) 15:18:06
>>915
ありがとう、やっぱりそうする。

917 名前:デフォルトの名無しさん :2007/01/30(火) 15:28:58
COAPはコンパイルできない。

918 名前:デフォルトの名無しさん :2007/01/30(火) 15:32:12
コンテナの挿入操作はconstオブジェクトを受け入れる。
auto_ptrのコピーコンストラクタは非constオブジェクトを要求。

919 名前:デフォルトの名無しさん :2007/01/30(火) 16:34:14
wgではauto_ptrを廃止せよという提案もあるそうですね。

920 名前:デフォルトの名無しさん :2007/01/30(火) 16:36:45
auto_ptr は低コストだから、あったほうがいいなぁ。

921 名前:デフォルトの名無しさん :2007/01/30(火) 17:25:59
release()出来るのも地味にありがたい

922 名前:デフォルトの名無しさん :2007/01/30(火) 21:20:47
template <template <class> class T>

すみませんこれの意味が分からないのですが、
誰か教えてください

923 名前:デフォルトの名無しさん :2007/01/30(火) 21:38:52
>>922
規格書の14.3.3 Template template arguments

924 名前:デフォルトの名無しさん :2007/01/30(火) 21:44:02
>>923
ありがたまきん
ググって見ます

925 名前:デフォルトの名無しさん :2007/01/30(火) 22:46:51
テンプレートテンプレートパラメータに便乗した、前からの疑問なんだけど。

template < class T > struct Foo ; //OK
template < typename T > struct Bar ; //OK
template < template<typename> class T> struct Hoge ; //OK
template < template<typename> typename T>struct Moke ; //Error


なんでテンプレートテンプレートパラメータの、この部分は、
classじゃ無ければならないんだろう。なぜここはtypenameにできないのだろう。

926 名前:デフォルトの名無しさん :2007/01/30(火) 22:51:53
組み込み型ってことがありえないからだろ

927 名前:デフォルトの名無しさん :2007/01/30(火) 23:16:21
そういうものなのかな。
個人的には、typenameの方がすきなのだけれど。

でも、C++ template Metaprogrammingに書いてあるように、
これはちょっと分かりにくい。

template < typename T, typename T::type N>
class Foo ;

928 名前:デフォルトの名無しさん :2007/01/30(火) 23:22:58
typenameとclassに違いがあったなんて!!!

929 名前:デフォルトの名無しさん :2007/01/30(火) 23:23:38
ってかな::typeとか::valueみたいなのが絡んでくるのは不慣れな場合総じて意味不明
おもしろいんだけどな

930 名前:デフォルトの名無しさん :2007/01/30(火) 23:36:16
今更だけど、more effective c++が品切れ(絶版?)
だったんで原著を買うことにした。amazonで20000円とかで売ってるヤシいたけど
さすがにそんな値段では買いたくない

931 名前:デフォルトの名無しさん :2007/01/31(水) 19:51:45
using namespace std;
wcout.imbue(locale("japanese"));
wcout << 12345 << std::endl;
cout << 12345 << std::endl;

このプログラムを実行すると、実行結果は
12,345
12345
となります
カンマはいらないんだけど、これを消すにはどうしたらいいんでしょうか

932 名前:デフォルトの名無しさん :2007/01/31(水) 20:09:35
locale(locale("japanese"), "C", locale::numeric)

933 名前:デフォルトの名無しさん :2007/01/31(水) 20:24:26
1〜4999までの整数をローマ記法に変換するプログラムを作成して
1,2,4,8,32,64,128,4096を変換したいのですが

#include<stdio.h>
int main (void)
{
iny i,j,n;
char roman[7]={'M','D','C','L','X','V','I'};
int num[7]={1000,500,100,50,10,5,1};
scanf("%d"<&n);
for(i=0;n;i++);
{
for(j=0;j<n/num[i];j++)
putchar(roman[i]);
n%=num[i]
}
return 0;
}
でやってみると1回しか変換できないのですが、
いくつもの値を一度に変換するにはどうすればいいのでしょうか

934 名前:931 :2007/01/31(水) 20:24:50
>>932
ありがとうございます
出力は出来たのですが、ロケールを元に戻すにはどうすればいいんでしょうか

locale(locale("japanese"), "C", locale::numeric);
wcout << 12345 << std::endl;//12345と出力。期待の動作
wcout.imbue(locale("japanese"));
wcout << 12345 << L"あいうえお" << std::endl;//12,345あいうえおと出力。期待の動作
locale(locale("japanese"), "C", locale::numeric);
wcout << 12345 << std::endl;//12,345と出力。ここも12345と出力したい
cout << 12345 << std::endl;//12345と出力。期待の動作

935 名前:デフォルトの名無しさん :2007/01/31(水) 20:39:54
>>933
好きな方を選べ。2度と来るんじゃねえぞ。

くだすれC言語(初心者用)
http://pc10.2ch.net/test/read.cgi/tech/1153542424/
C/C++の宿題を片付けます 82代目
http://pc10.2ch.net/test/read.cgi/tech/1169575464/


936 名前:デフォルトの名無しさん :2007/01/31(水) 20:47:04
すいませんでした

937 名前:デフォルトの名無しさん :2007/01/31(水) 20:57:49
>>935
そういじめるな
>>936
もっと大きくなってからもどっておいで。


938 名前:デフォルトの名無しさん :2007/01/31(水) 23:01:37
>>933
iny という型をどこかで宣言する必要がある。


939 名前:デフォルトの名無しさん :2007/01/31(水) 23:11:04
>>930
日本語版は訳がみょうちきりんだから原著読んだほうが多分いい。
がんばって買いなされ

940 名前:デフォルトの名無しさん :2007/01/31(水) 23:16:23
みょうちきりんでも、たぶん日本語読んだほうが速い〜

941 名前:デフォルトの名無しさん :2007/01/31(水) 23:17:30
配列の最大サイズが規定されているのか、教えて頂けますか。
newする場合と通常の固定長で宣言する場合に違いはありますか。
コンパイラの実装による、が答えなのかもしれませんがよろしくお願いします。

942 名前:デフォルトの名無しさん :2007/01/31(水) 23:17:31
>>938
ワロタ

943 名前:デフォルトの名無しさん :2007/01/31(水) 23:31:23
>>941
最大サイズは規定されていませんが、処理系が保証すべき最小サイズは
規定されているので、移植性を考えるとそれが最大サイズと言えます。

944 名前:デフォルトの名無しさん :2007/01/31(水) 23:32:27
>>934
imbue() すればいいんじゃないの?

945 名前:デフォルトの名無しさん :2007/01/31(水) 23:39:09
Effective C++ 3版の日本語訳はよかったな。moreの方も誰か訳しなおしてくれないだろうか…

946 名前:デフォルトの名無しさん :2007/01/31(水) 23:46:11
>>943
C++は知らないけど、Cだと32Kくらいだよな。
小さすぎ。

947 名前:デフォルトの名無しさん :2007/01/31(水) 23:47:32
静的なメモリ確保の限界が小さいのはしかたないだろ

948 名前:デフォルトの名無しさん :2007/02/01(木) 00:08:10
ifstream infile("hoge.c");
string word;
while (infile >> word) {
cout << word << endl;
}
以上のプログラムを改良してコメント行を表示させない仕様にしたい。
コメントの種類は下記の2種とする。
1) //から文末or
2) /*から*/
なにかスマートな方法はないでしょうか?

949 名前:デフォルトの名無しさん :2007/02/01(木) 00:14:44
>>948
改良って言うか、一からつくるのとかわらんじゃん。。。

950 名前:デフォルトの名無しさん :2007/02/01(木) 00:19:02
boost::spirit::comment_p

951 名前:デフォルトの名無しさん :2007/02/01(木) 00:19:03
//の方は簡単だが/* */の方はセルオートマトンを使わないと
頭がゴチャゴチャするぞ。

952 名前:デフォルトの名無しさん :2007/02/01(木) 00:29:03
構造体とクラスって何が違うんでしょうか。
デフォルトでprivateがクラス、publicが構造体くらいしか思いつきません...

953 名前:デフォルトの名無しさん :2007/02/01(木) 00:31:07
現状ではそれぐらいの違いしかなかったはず

954 名前:デフォルトの名無しさん :2007/02/01(木) 00:35:58
構造体への値の代入をコンパイルタイムで行いたいのだけど
こんなかんじのことをすることはできないでしょうか?

struct a{ float v;}

mpl::map<
pair <char, a.v=8>,
pair <unsigned char, a.v=9>,
pair <int char, a.v=10>,
> type2valuedStr;

at<char,type2valuedStr>::type a_char;



955 名前:デフォルトの名無しさん :2007/02/01(木) 00:40:02
c++のコードを貼り付けたホームページを作るのに
いいツールがないでしょうか?

956 名前:デフォルトの名無しさん :2007/02/01(木) 00:41:25
<pre></pre>

957 名前:デフォルトの名無しさん :2007/02/01(木) 00:42:33
<code> </code>

958 名前:デフォルトの名無しさん :2007/02/01(木) 00:46:16
Global…はやりすぎか。

959 名前:デフォルトの名無しさん :2007/02/01(木) 00:51:57
>>955
bison と flex を使って、文字への色付けツール作るといいよ。
いい練習になる。

960 名前:デフォルトの名無しさん :2007/02/01(木) 01:42:47
それはいったい何の練習だ?

961 名前:デフォルトの名無しさん :2007/02/01(木) 01:45:23
すいません、初心者なのですが、
可変長のバイト列のバッファを作りたくて、とりあえず vector<unsigned char> buffer;
としました。
で、ここに unsigned int の変数のデータや unsigned char の配列のデータを
追加したい場合、どうすべきでしょうか?

今はデータを1バイトずつ push_back() とかしてるんですが、あまりにベタだと思うんで、
もしかして STL の範囲でもっと楽にできたりしますか?
buffer をメンバに持つ、複数の型を push_back できるようなクラスを作るというのは
おおげさですかね?

962 名前:デフォルトの名無しさん :2007/02/01(木) 01:47:55
とりあえずキャストしてback_inserterにcopyすれば通らない?

963 名前:デフォルトの名無しさん :2007/02/01(木) 01:55:25
memcopyしちゃえよYOU!

964 名前:デフォルトの名無しさん :2007/02/01(木) 02:06:49
>>961 insert()

965 名前:デフォルトの名無しさん :2007/02/01(木) 02:15:35
vector<T>::insertはvector<T>::iteratorあるいはconstT&しか引数に取らないと思っていたが。

966 名前:デフォルトの名無しさん :2007/02/01(木) 02:17:57
>>965 VC6 ユーザー乙

967 名前:デフォルトの名無しさん :2007/02/01(木) 03:02:20
アレッ? insertでどうやって入れるの?


968 名前:デフォルトの名無しさん :2007/02/01(木) 03:09:18
テキストファイル全行を、std::vector<std::string>またはstd::vector<char *>またはchar **等に1行ずつ格納したいのですが、
どうするのがいいのでしょう。
改行コードが現れるまで1文字ずつfgetcで読んでいって長さを測り、
メモリに格納していくという感じになるのでしょうか。
istream等を使うと楽に書けますか?
BCBのVCLでいう、TStringListと、そのLoadFromFileみたいなのを書きたいのですが。

969 名前:デフォルトの名無しさん :2007/02/01(木) 03:11:20
>>968
std::getline


970 名前:デフォルトの名無しさん :2007/02/01(木) 08:54:22
>>967
unsigned int uint;
unsigned char uchar[N];

vec.insert(vec.end(), reinterpret_cast<unsigned char*>(&uint), reinterpret_cast<unsigned char*>(&uint) + sizeof(uint));
vec.insert(vec.end(), uchar, uchar + LEN);

971 名前:デフォルトの名無しさん :2007/02/01(木) 09:50:24
vectorの要素への参照(ポインタ、イテレータ)を取得した後にpush_backなどが起こりうるので悩んでいるんですが、
思いつく対処法は以下しかなく、どれも困難です。定石などがありましたら是非ご教授下さい。

・要素への参照を取得する前にresave()、
 push_backされる要素が幾つあるかが分からないので困難。

・思い切って参照ではなく添え字を記録しちゃう、
 でも何か違うような気がする。

972 名前:961 :2007/02/01(木) 10:04:44
なるほど、insert でできるんですね。

>>970
ついでにお聞きしてしまうんですが、このように vector の insert やコンストラクタの
引数に2つのポインタを渡して動くのが、ちょっと理解できてないんですが...

vector のメンバにには、普通のポインタの引数を取る型のものってないですよね?
で、デバッガで追うとどうも2つのイテレータの値をもつタイプの関数が呼ばれている
ようなんですが、テンプレートに渡した型のポインタはイテレータと同一視できる
という事なんでしょうか?
かなりアホなことを聞いているかもしれませんが...

973 名前:デフォルトの名無しさん :2007/02/01(木) 10:27:23
>>971
・思い切って list にしちゃう

974 名前:デフォルトの名無しさん :2007/02/01(木) 10:29:14
>>972
ポインタはイテレータとしての要件をすべて満たす。
イテレータというコンセプトのモデルであるとも言う。

975 名前:デフォルトの名無しさん :2007/02/01(木) 14:32:44
ポインタを模倣するようにイテレータが設計された
ってこれ歴史常識じゃないのか…

976 名前:デフォルトの名無しさん :2007/02/01(木) 17:29:23
>>955
source highlight

977 名前:デフォルトの名無しさん :2007/02/01(木) 20:01:55
継承関係にある2つのクラスがあるとして
 class base {};
 class derived : public base {};
派生クラスのコンテナのイテレータを
 vector<derived*> v;
 vector<base*>::iterator i = v.begin();
のように基底クラスのコンテナのイテレータに自動的に変換して欲しいと
感覚的には思うんですが、なぜそうなっていないのでしょうか???

978 名前:デフォルトの名無しさん :2007/02/01(木) 20:14:58
思わねーよそんな行為

979 名前:デフォルトの名無しさん :2007/02/01(木) 20:20:07
>>977
それができたら、コンテナにいろんな型を混在
させることが出来ちゃうからじゃないか?

980 名前:デフォルトの名無しさん :2007/02/01(木) 20:37:27
>>977
それは駄目だろう。
例えば、こういうのもあったときに
class derived2 : public base{};

vector<derived*>v;
vector<base*>::iterator i = v.begin();
が出来たら

*i = new derived2;
と書けてvector内の型安全性が損なわれる。

981 名前:977 :2007/02/01(木) 20:51:53
 *i = new derived2;
で型安全性が損なわれるという理由がよく分からないです。
 base* p = new derived1;
 p->func();
 delete p;
 p = new derived2;
 p->func();
 delete p;
↑これは普通ですよね。
↓これも
 void func(base* p) {}
 derived1* p = new derived1;
 func(p);
駄目な例があると分かり易いんですが…。


982 名前:977 :2007/02/01(木) 20:54:55
>>980
すみません。示していただいた例を誤解していました。
>>981はなしで。もう少し考えます。

983 名前:977 :2007/02/01(木) 21:04:00
>>979-980
理解しました。
 derived* array[10];
 base* p = array[0];
 p = new derived2;
こういうことをしようとしていたんですね(でもこれはコンパイル通るんですね…)
どうもでした〜。

984 名前:デフォルトの名無しさん :2007/02/01(木) 21:16:23
結局、ポインタのポインタには、「ポインタの自動変換規則」は適用されない、ってはなしでそ。

985 名前:デフォルトの名無しさん :2007/02/01(木) 21:19:07
いわば、イテレータはショボイポインタ
ポインタならDerivedT*にはBaseT*が代入できるが
イテレータはショボイからできない
 例:--相当のことがができるイテレータは
 5種類のSTLイテレータのうち2種類しかない

986 名前:デフォルトの名無しさん :2007/02/01(木) 21:26:09
>983
間違ってる。
 derived* array[10];
 base** p = &array[0];
 *p = new derived2;
まだこっちの方が正確。

987 名前:977 :2007/02/01(木) 21:52:06
>>986
あ!そうですね。
その場合はコンパイル通らないのですね(>>984に書かれているように)。
整合性あるんですね。


988 名前:985 :2007/02/01(木) 21:52:38
勘違い。977の言っていることが実行できるとすると
derived1,derived2がbaseを継承しているとして
vec<derived1*> v1;
vec<derived2*> v2;
for(vector<derived1*>::iterator it = v2.begin();it!=v2.end();++it){
 //v2のイテレータでv1を処理。これはおかしい
}

989 名前:デフォルトの名無しさん :2007/02/01(木) 22:04:14
vc2005EEを使っているのですが、質問があります。

デバッグモードではCPU使用率が20〜35%に押さえられているのですが、
リリースモードにすると使用率が常時100%に跳ね上がってしまいます。

これの原因分かる方いませんか?
もしくは原因究明の方法が分かる方いませんか?
(プロファイラは使えません^^)

990 名前:デフォルトの名無しさん :2007/02/01(木) 23:43:42
C++のマクロで引数を省略することはできますか?

下記のマクロをLOG(msg)のように使いたいのですが。。。

#define LOG(msg,level) writeLog(__FILE__,__LINE__,msg,level)

void writeLog(char* f,int line,char* msg,int level=0)

991 名前:デフォルトの名無しさん :2007/02/01(木) 23:47:39
>>989
とりあえず環境依存なのでスレ違い。


992 名前:デフォルトの名無しさん :2007/02/02(金) 00:07:31
__VA_ARGS__ でググレ

ば多少は使える情報があるかもしんない
ところで次スレは

993 名前:デフォルトの名無しさん :2007/02/02(金) 00:22:25
次スレのタイトルはアカデミックなものにして欲しい

994 名前:デフォルトの名無しさん :2007/02/02(金) 00:24:49
【アカデミックな】C++相談室 part56++

995 名前:デフォルトの名無しさん :2007/02/02(金) 00:25:38

これはひどい

996 名前:デフォルトの名無しさん :2007/02/02(金) 00:26:45
tempalte<template<class> class T>C++相談室<part56>

997 名前:デフォルトの名無しさん :2007/02/02(金) 00:28:04
#define C++相談室 part56

998 名前:デフォルトの名無しさん :2007/02/02(金) 00:31:21
998!!!!

999 名前:デフォルトの名無しさん :2007/02/02(金) 00:32:27
999!


1000 名前:デフォルトの名無しさん :2007/02/02(金) 00:32:36
5年間2chにいるけど、今まで一度も1000をとったことがないんだよな。
初めての1000、取れますように。


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