- PR -

C++クラスライブラリでのconstinitializer

1
投稿者投稿内容
たけやん
会議室デビュー日: 2004/11/10
投稿数: 9
投稿日時: 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;
}
---------------------------------------------------
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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/11/10
投稿数: 9
投稿日時: 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;
}
---------------------------------------------------

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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/11/10
投稿数: 9
投稿日時: 2004-12-22 19:03
>MMX様

ご返答、有難うございます。
とりあえず、今は、普通にconst定義行を定義使用行より前宣言する事にします。
また、何かありましたら宜しくご教授ください。
有難うございました。<(_ _)>
1

スキルアップ/キャリアアップ(JOB@IT)