Ich verstehe, wenn ich ein const-Array in einem Klasse-Namespace in C wollen ++ kann ich nicht tun:Statische Konst Initialisiert Structure Array in C++ Klasse
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;
}
ich tun muss:
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 "p" und "pp" sind öffentlich, wenn ich möchte, dass sie privat sind. Gibt es in C++ keine Möglichkeit, private statische Arrays zu initialisieren?
EDIT: ------------------- Danke für die Antworten. Zusätzlich möchte ich, dass diese Klasse eine Bibliothek ist, nur Header-Dateien, die von einem Hauptprojekt verwendet werden können. Wenn die folgenden Initialisierer in mehrere Dateien eingeschlossen werden, führt dies zu Fehlern bei der "Mehrfachdefinition von".
const c::p c::pp[2] = { {1,1},{2,2} };
Wie kann ich das lösen?
Zusätzlich zu den tatsächlichen Frage Antworten, in C++ '(void)' ist unnötig und schlechte Praxis, genau wie 'Klasse c' ist nichts. Sie müssen 'int main() {c varname; zurückgeben 0; } ' – Puppy
Danke - warum ist (void) schlechte Praxis? – Sam
(void) schadet nicht, aber auch nicht gut. Es wird aus Gründen der Kompatibilität mit C unterstützt, dies kann sich jedoch in zukünftigen Versionen ändern. – TonyK