Erste Schritte in C++ mit Klassen...
-
Hi Leute,
Ich habe vor kurzem mit C++ angefangen und natürlich auch schon mit einem Programm begonnen.
Nun bekomme ich aber einen Menge Fehler, die ich mit C++ ohne Klassen nicht hatte.#include <iostream> #include <ctime> using namespace std; int main(){ } class Time{ public: const char* day; time_t now = time(0); tm *ltm = localtime(&now); const char* getDay(){ switch(ltm->tm_wday){ case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; default: day = "Weekend"; break; } return day; } char getSec(){ return ltm->tm_sec; } char getMin(){ return ltm->tm_min; } char getHour(){ return ltm->tm_hour; } }und ich bekomme folgende Fehler:
Z:\User\Date and Time.cpp|16|error: 'time_t time(time_t*)' cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|16|error: a function call cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|16|error: ISO C++ forbids initialization of member 'now'|
Z:\User\Date and Time.cpp|16|error: making 'now' static|
Z:\User\Date and Time.cpp|16|error: ISO C++ forbids in-class initialization of non-const static member 'now'|
Z:\User\Date and Time.cpp|17|error: 'tm* localtime(const time_t*)' cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|17|error: 'Time::now' cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|17|error: '&' cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|17|error: a function call cannot appear in a constant-expression|
Z:\User\Date and Time.cpp|17|error: ISO C++ forbids initialization of member 'ltm'|
Z:\User\Date and Time.cpp|17|error: making 'ltm' static|
Z:\User\Date and Time.cpp|17|error: invalid in-class initialization of static data member of non-integral type 'tm*'|
Z:\User\Date and Time.cpp||In member function 'const char* Time::getDay()':|
Z:\User\Date and Time.cpp|20|error: 'ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member function 'char Time::getSec()':|
Z:\User\Date and Time.cpp|32|error: 'ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member function 'char Time::getMin()':|
Z:\User\Date and Time.cpp|36|error: 'ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member function 'char Time::getHour()':|
Z:\User\Date and Time.cpp|40|error: 'ltm' was not declared in this scope|
Z:\User\Date and Time.cpp|41|error: expected unqualified-id at end of input|
||=== Build finished: 17 errors, 0 warnings ===|vielleicht weiß ja jemand eine Lösung weil ich steig da nicht mehr durch

-
du kannst die member in c++03 nicht so initialisieren. muss in den konstruktor rein.
-
vielleicht kannst du mir ein kurzes Beispiel geben wie du das genau meinst, denn wenn ich nun das Ganze in den Konstruktor packe bekomme ich zwar weniger Fehler aber noch immer 5.
#include <iostream> #include <ctime> using namespace std; int main(){ } class Time{ public: Time(void){ time_t now = time(0); tm *ltm = localtime(&now); } const char* day; const char* getDay(){ switch(ltm->tm_wday){ case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; default: day = "Weekend"; break; } return day; } char getSec(){ return ltm->tm_sec; } char getMin(){ return ltm->tm_min; } char getHour(){ return ltm->tm_hour; } }Z:\User\Date and Time.cpp||In member function
const char* Time::getDay()':| Z:\\User\\Date and Time.cpp|21|error:ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member functionchar Time::getSec()':| Z:\\User\\Date and Time.cpp|33|error:ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member functionchar Time::getMin()':| Z:\\User\\Date and Time.cpp|37|error:ltm' was not declared in this scope|
Z:\User\Date and Time.cpp||In member functionchar Time::getHour()':| Z:\\User\\Date and Time.cpp|41|error:ltm' was not declared in this scope|
Z:\User\Date and Time.cpp|42|error: expected unqualified-id at end of input|
||=== Build finished: 5 errors, 0 warnings ===|aber ich habe doch ltm deklariert im Konstruktor
-
Raavgo schrieb:
aber ich habe doch ltm deklariert im Konstruktor
ja, als lokale Variable. Die ist nach Beenden des Konstruktors wieder weg.
Was du suchst, sind Membervariablen. In deinem (hoffentlich guten) C++-Buch wird bestimmt was darüber stehen. Alternativ hilft Google.
-
ja hast du und auch nur genau da. wenn du eine variable in der ganzen instanz der klasse haben willst dann musst du sie schon in der klasse selbst definieren. im konstruktor kannst du sie dann initialisieren. (stichwort: initialisierungsliste)
steht sicher in deinem buch...
welches ist das wenn ich fragen darf?
-
public: time_t now; tm *ltm; Time(void){ now = time(0); ltm = localtime(&now); }
-
Ich lerne ohne Buch, da ich von C komme und diese Sprache schon sehr gut beherrsche nur fand ich bis dato noch kein gutes Buch für Umsteiger da ich mich nicht nochmal durch die Grundlagen quälen möchte.
-
Raavgo schrieb:
Ich lerne ohne Buch, da ich von C komme und diese Sprache schon sehr gut beherrsche nur fand ich bis dato noch kein gutes Buch für Umsteiger da ich mich nicht nochmal durch die Grundlagen quälen möchte.
Das ist für C++ absolut nicht empfehlenswert.
Das Skript hier ist ganz gut: http://www.walddobler.de/Skripte/cpp/cpp_mta_rwthaa.pdf
Anschließend noch weitere Bücher wie Effective C++, Modern C++ Design, C++ Coding Standards und/oder Exceptional C++ und du bist bestens gerüstet.
-
Raavgo schrieb:
Ich lerne ohne Buch, da ich von C komme und diese Sprache schon sehr gut beherrsche nur fand ich bis dato noch kein gutes Buch für Umsteiger da ich mich nicht nochmal durch die Grundlagen quälen möchte.
"die c++ programmiersprache" wäre ein geeignetes buch.
wie lernst du wenn keine bücher liest? praktikum? studium?
-
Raavgo schrieb:
Ich lerne ohne Buch, da ich von C komme und diese Sprache schon sehr gut beherrsche nur fand ich bis dato noch kein gutes Buch für Umsteiger da ich mich nicht nochmal durch die Grundlagen quälen möchte.
-
Nathan schrieb:
Das Skript hier ist ganz gut: http://www.walddobler.de/Skripte/cpp/cpp_mta_rwthaa.pdf
naja, hatte beim kurzen überfliegen ein paar kleinere punkte die ich so nicht sagen / machen würde aber sicherlich besser als das meiste was im internet so herumkursiert.
edit: bzw. ein paar kleine dinge die meinem erachten nach falsch sind.
-
asfdlol schrieb:
Raavgo schrieb:
Ich lerne ohne Buch, da ich von C komme und diese Sprache schon sehr gut beherrsche nur fand ich bis dato noch kein gutes Buch für Umsteiger da ich mich nicht nochmal durch die Grundlagen quälen möchte.
"die c++ programmiersprache" wäre ein geeignetes buch.
wie lernst du wenn keine bücher liest? praktikum? studium?Ich lese schon Bücher, nur sind diese normalerweise sehr Theoretisch, mit solchen Praktischen Büchern fange ich einfach nix an weil ich immer nur zu Bestimmten Zeiten lese. (Im Bett vor dem einschlafen)
Aber zurück zu deiner eigentlichen Frage: Ich lerne C++ momentan in der HTL (Höhere Technische Lehranstalt -> ist ein Österreichischer Schultyp)