In der Deklaration (also z.B. in Vector3D.h) steht die Klasse, da kann
aber keine Definition z.B. von statischen Elementen rein (nur die
Deklaration).
Deshalb sollte es auf eine .h und eine .cpp aufgeteilt werden.
Vector3D.h:
1 | struct Vector3D
|
2 | {
|
3 | private:
|
4 | float X;
|
5 | float Y;
|
6 | float Z;
|
7 |
|
8 | public:
|
9 | Vector3D(float x, float y, float z); // Deklaration des ctor
|
10 | //...
|
11 | static const Vector3D Zero; // hier nur die Deklaration des 0-Vektors
|
12 | };
|
und die Vector3D.cpp:
1 | const Vector3D Vector3D::Zero( 0.0f, 0.0f, 0.0f ); // und hier die Definition des 0-Vektors
|
2 |
|
3 | Vector3D::Vector3D(float x, float y, float z) // Definition des ctor
|
4 | : X(x)
|
5 | , Y(y)
|
6 | , Z(z)
|
7 | {
|
8 | ...
|
9 | }
|
Eine Funktionsdefinition, z.B. die des Konstruktors, könnte auch direkt
in die Klasse und damit in die Headerdatei. Dann wäre sie automatisch
als inline deklariert.
Bei Daten geht das nicht, weil deren Definition nur an einer Stelle im
gesamten Programm stehen darf, bei mehrfachem #include der Headerdatei
in verschiedenen Übersetzungseinheiten würde also dann der Linker über
Mehrfachdefinitionen meckern.