Static Const Initialisiert Struktur-Array in C++ - Klasse

Ich verstehen, wenn ich eine const-array in eine Klasse namespace in C++ kann ich aber nicht:

class c
{
private:
  struct p
  {
    int a;
    int b;
  };
  static const p pp[2];
};

const c::p pp[2] =  { {1,1},{2,2} };

int main(void)
{
  class c;
  return 0;
}

Muss ich tun:

class c
{
public:
  struct p
  {
    int a;
    int b;
  };
  static const p pp[2];
};

const c::p pp[2] =  { {1,1},{2,2} };

int main(void)
{
  class c;
  return 0;
}

Aber dies erfordert, dass "p" und "pp" werden öffentliche, wenn ich will, dass Sie private. Gibt es keine Möglichkeit in C++ zu initialisieren private static arrays?

BEARBEITEN: -------------------
Vielen Dank für die Antworten. Darüber hinaus möchte ich diese Klasse in eine Bibliothek, header-Dateien, die nur für ein Hauptprojekt. Einschließlich der folgenden initialiser Ergebnisse in "mehrfach definiert" Fehler beim enthalten von mehreren Dateien.

const c::p c::pp[2] =  { {1,1},{2,2} };

Wie kann ich dieses Problem lösen?

  • Zusätzlich zu der eigentlichen Frage Antworten, die in C++ (void) ist unnötig und schlechte Praxis, wie class c ist nichts. Sie müssen int main() { c varname; return 0; }
  • Danke - warum (void) schlechte Praxis?
  • (void) schadet nicht, aber es tut nicht jedem gut. Es wird unterstützt, um die Kompatibilität mit C, aber dies kann sich in zukünftigen Versionen ändern.
InformationsquelleAutor Sam | 2011-01-05
Schreibe einen Kommentar