[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.10.1 static メンバの宣言と定義

クラスに static のデータメンバがある場合、その static なメンバを 宣言するだけでは充分でない。それを定義もしなければならない。 以下に例を示す。

 
class Foo
{
  …
  void method();
  static int bar;
};

この宣言でなされることは、クラス FooFoo::bar という 名前の int があること、Foo::method という名前のメンバ 関数があることだけである。 だが、依然として、methodbar両方をどこかで 定義する必要がある。 ANSI 規格のドラフトに従うなら、初期化子を一個、ある一つの(そして 一つだけの)ソースファイルで、以下のように提供しなければならない。

 
int Foo::bar = 0;

他の C++ コンパイラは、この規格の動作を正しく実装していない可能性がある。 その結果、そのようなコンパイラの一つから g++ に 移行したときに、実際に正しく動くように見えたプログラムが規格に 適合しないということが見つかるかもしれない。 g++ は、定義のない static のデータメンバは、未定義のシンボルとして 報告する。


This document was generated using texi2html 1.78.