Nie rozumiem, dlaczego C++ dopuszcza tylko typy całkowite i wyliczenia (wyliczenie jest również typu integralnego), które zostaną zdefiniowane w deklaracji klasy. Wszystkie pozostałe typy, w tym typy punktów ruchomych (tj. Podwójne i zmiennoprzecinkowe), muszą być zdefiniowane poza deklaracją klasową. Najwyraźniej musi to być powód, ale nie mogę tego rozgryźć.Dlaczego tylko typ całkowy lub wyliczeniowy można zainicjować w klasie C++?
przykładem Kod:
#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;
}
Będziesz miał problem, jeśli wstawisz strukturę 'Node' w nagłówku i umieścisz ją w 2 plikach. –
To jest bardzo dobre pytanie - Mam komórki mózgowe, które ratują tę niedzielę. Dzięki –
Peculiarne reguły dla zmiennoprzecinkowych są zwykle spowodowane obawami dotyczącymi kompilatorów krzyżowych, czyli kompilatorów działających na jednym systemie, ale generujących kod dla innego. Łatwo radzić sobie z typami integralnymi, które pasują do systemu docelowego; uzyskanie szczegółów na temat typów zmiennoprzecinkowych innego systemu jest znacznie bardziej skomplikowane. –