Ich verstehe nicht, warum C++ nur ganzzahlige Typen erlaubt und enum (enum ist auch ein ganzzahliger Typ) innerhalb einer Klassendeklaration zu definieren. Alle anderen Typen, einschließlich Float Point-Typen (d. H. Double und Float) müssen außerhalb der Klassendeklaration definiert werden. Natürlich muss das ein Grund dafür sein, aber ich kann es nicht herausfinden.Warum nur integral oder enum-Typ in einer C++ - Klasse initialisiert werden kann?
Code-Beispiel:
#include <iostream>
using namespace std;
struct Node {
static const int c = 0; // Legal Definition
static const long l = 0l; // Legal Definition
static const short s = 0; // Legal Definition
static const float f = 0.0f; // Illegal definition
static const string S = "Test"; // Illegal definition
static const string JOB_TYPE; // Legal declaration
static const float f; // Legal declaration
static const double d; // Legal declaration
};
const string Node::JOB_TYPE = "Test"; // correct definition
const float Node::f = 0.0f; // correct definition
const double Node::d = 0.0; // correct definition
int main() {
cout << Node::c << endl;
cout << Node::c << endl;
cout << Node::JOB_TYPE << endl;
cout << Node::f << endl;
}
Sie haben nur Probleme, wenn Sie die 'Node' Struktur in eine Kopfzeile einfügen und Sie in 2 Dateien einschließen. –
Das ist eine sehr gute Frage - Habe meine Gehirnzellen diesen Sonntag rattern lassen. Danke –
Besondere Regeln für Floating-Point sind in der Regel wegen Bedenken über Cross-Compiler, dh Compiler, die auf einem System ausgeführt werden, aber Code für einen anderen generieren. Es ist einfach genug, mit integrierten Typen zu arbeiten, die dem Zielsystem entsprechen. Die Details der Gleitkommatypen eines anderen Systems zu erhalten, ist viel komplizierter. –