Problem bei Constructor einer Klasse
-
Hi Forum,
Mal wieder bracuhe ich eure Hilfe :). Bei folgendem Code:
#include <iostream> class Color { public: unsigned char R, G, B, A; Color(unsigned char prmR, unsigned char prmG, unsigned char prmB, unsigned char prmA) : R(prmR), G(prmG), B(prmB), A(prmA) { } }; int main(int argc, char* argv[]) { Color MyColor(); std::cout << "r: " << (int)MyColor.R << std::endl << "g: " << (int)MyColor.G << std::endl << "b: " << (int)MyColor.B << std::endl << "a: " << (int)MyColor.A << std::endl; return 0; }bekomme ich die Fehlermeldung:
error: request for member "R" in "MyColor", which is of non-class type 'Color ()()'
error: request for member "G" in "MyColor", which is of non-class type 'Color ()()'
error: request for member "B" in "MyColor", which is of non-class type 'Color ()()'
error: request for member "A" in "MyColor", which is of non-class type 'Color ()()'Warum zur Hölle meint der MyColor wäre von einem Typ der keine Classe ist? Hilft mir da jemand weiter?
Mfg X4rd3n
-
da du den standart konstruktor benutzt lässt die die klammern bei der erzeugung weg
Color MyColor;reicht
und du solltest die werte wenigstens initialisieren
wenn du schon nicht den konstruktor aufrufst den du da geschrieben hast dann machd as wenigstens per default werteclass Color { public: unsigned char A, B, C, D; Color(unsigned char prmR = 0, unsigned char prmG = 0, unsigned char prmB = 0, unsigned char prmA = 0) : R(prmR), G(prmG), B(prmB), A(prmA) { } };so sollte das dann klappen
-
Normalerweise sidn die auch initialisiert :). Hab die Funktionsdeklaration nur in einer Headerdatei stehen und hab jetzt versucht den Code soweit zu verkürzen wie es geht und dabei die Default-Angaben aus der Headerdatei vergessen. Naja auf jedenfall mal Danke, ohne Klammern am Ende gehts.
-
x4rd3n schrieb:
Naja auf jedenfall mal Danke, ohne Klammern am Ende gehts.
Vielleicht noch zur Erklärung wieso:
Color MyColor(); // Das ist eine Funktionsdeklaration! Color MyColor; // Defaultkonstruktor Aufruf Color MyColor = Color(); // Ebenfalls DefaultkonstrutorGrüssli
-
Weisst du auch warum?

Color MyColor();wird nicht als Instanziierung, sondern als Funktionsdeklaration angesehen. Wie sollte man sonst eine Funktion mit 0 Parametern und dem RückgabetypenColordeklarieren können?Ach ja, benutz bitte anstatt der C-Casts mit Klammern das C++-Mittel
static_cast.