- - PR -
C++クラスライブラリでのconstinitializer
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-12-22 12:20
C++クラスライブラリのプロジェクトで、以下のようなコードをコンパイルした際、「DEFINE_NUMBER」が未定義エラーになってしまいます。
「INTERNAL STANDARD ISO/IEC 14882 Programing Language C++」説明書には、以下のような定義行を、定義使用行の後に記述しても、スコープ内ならconstinitializer機能により参照され、未定義エラーにはならないと記述してあります。 ですが、クラスライブラリでは、アセンブリサポート('/clr'コンパイルオプション指定)となりますので、以下コードでは、「DEFINE_NUMBER」が未定義エラーでコンパイルが通りません。 どなたか、、「DEFINE_NUMBER」定義行を上に移動しないでコンパイルを通る方法をご存知の方、ご教授をお願い致します。 --------------------------------------------------- class Test { public: int func(const long numb = DEFINE_NUMBER); private: static const long DEFINE_NUMBER= 100; } --------------------------------------------------- |
|
投稿日時: 2004-12-22 14:24
void m(const long numb = DEFINE_NUMBER) ← だめ
{ long p; p= DEFINE_NUMBER;} // ok private: static const long DEFINE_NUMBER = 100; この場合 「コンパイル時の定数式」じゃないからでは、 互換ライブラリを作っている人々は色々、ぶち当たるらしい。 汎整数定数式とは何か? http://boost.cppll.jp/HEAD/more/int_const_guidelines.htm [ メッセージ編集済み 編集者: MMX 編集日時 2004-12-22 14:39 ] |
|
投稿日時: 2004-12-22 16:32
>MMX様
ご返答、有難うございます。 >この場合 「コンパイル時の定数式」じゃないからでは、 すみません、「コンパイル時の定数式」の意味が良く理解できません。 宜しければ、もう少し詳しく教えて頂けないでしょうか? また、やはりクラスライブラリでは、以下のような定義使用行が定義行より前では、コンパイラが認識できないと思って良いのでしょうか? よろしくお願いします。 --------------------------------------------------- class Test { public: int func(int a, const long numb = DEFINE_NUMBER); private: static const long DEFINE_NUMBER= 100; } --------------------------------------------------- |
|
投稿日時: 2004-12-22 18:37
VC++ ではそうらしい、としかわかりません。
C などでは ソースマクロで処理していた領域ですから。 http://boost.cppll.jp/HEAD/more/microsoft_vcpp.html 汎整数定数式を参照するために、常に完全に修飾された名前を使い なさい。 と言われても Visual Studioで Test:: と打つとちゃんと DEFINE_NUMBER がヒントされるが 引数のデフォルトの定数式では Test:: が無視されるようです。 古い時代の記事ですが C++ 移植性ガイド http://www.mozilla-japan.org/hacking/portable-cpp.html 『C++ コンパイラは Cコンパイラほど標準化されていません。 ある C++ コンパイラでの動作は別のものでは動作せず、 C++ライブラリをリンクする ことなど、夢のような話です。』 現状はどうなのでしょうか ? [ メッセージ編集済み 編集者: MMX 編集日時 2004-12-22 18:58 ] |
|
投稿日時: 2004-12-22 19:03
>MMX様
ご返答、有難うございます。 とりあえず、今は、普通にconst定義行を定義使用行より前宣言する事にします。 また、何かありましたら宜しくご教授ください。 有難うございました。<(_ _)> |
1