Topic: static data members which are arrays


Author: dsouza@optima.cad.mcc.com (Desmond Dsouza)
Date: 18 Oct 90 16:36:07 GMT
Raw View
What are the rules for initialization of static class data members
which are arrays? Specifically:

1. Is an explicit size required in the declaration in the class?
2. Do arrays of built-in types follow the same rules as arrays of
   class types?
3. If an explicit size is required: WHY is it optional for global
   variables and required for static class members?

The ARM (p.289-290) is not explicit on this point, and the examples
included all have explicit sizes in them.

Sun C++ and Gnu G++ both behave as indicated in the example below:


------------------------------------------------------------

enum PLACEHOLDER {X1, X2};

class Act {
public:
  Act(PLACEHOLDER p) : mem(p) {}

  // data members
  PLACEHOLDER mem;
};





class FOO {
public:
  static int i1[];
  static int i2[2];
  static Act a1[];
  static Act a2[2];
};


int FOO::i1[] = {1,2};  // works fine for int[]

int FOO::i2[2] = {1,2};  // fine for int[]

Act globalArr[] = { Act(X1), Act(X2) }; // fine for globals with constructor


Act FOO::a1[] = { Act(X1), Act(X2) }; // **** error for static member with constructor


Act FOO::a2[2] = { Act(X1), Act(X2) }; // fine for *sized* static member with constructor




----------------------------------------------------------------------
--

-------------------------------------------------------------------------------
 Desmond D'Souza, MCC CAD Program | ARPA: dsouza@mcc.com | Phone: [512] 338-3324
 Box 200195, Austin, TX 78720 | UUCP: {uunet,harvard,gatech,pyramid}!cs.utexas.edu!milano!cadillac!dsouza