Klasse und Konstruktor
-
du braucht einen std ctor,
//... MeinDatum(); //...
bei sowas: MeinDatum test; wird der stan d a r t - ctor aufgerufen
-
Wenn du keinen eigenen Konstruktur erstellst, dann wird automatisch ein
Standardkonstruktor erstellt => dein Programm würde funktionieren.
Wenn du jedoch einen eigenen Konstruktor erstellst, dann wird NICHT mehr
automatisch ein Standardkonstruktor erstellt => dein Programm funktioniert
nicht mehr, weil der benötigte Standardkonstruktor nicht vorhanden ist.mfg JJ
-
Immernoch eine Fehlermeldung....
class MeinDatum { int t, m, j; public: // Konstruktor MeinDatum(); MeinDatum(int, int, int); void fAddiereJahr(); void fAddiereJahre(int n); void fSubtrahiereJahr(); void fSubtrahiereJahre(int n); void fAddiereMonat(); void fAddiereMonate(int n); void fSubtrahiereMonat(); void fSubtrahiereMonate(int n); void fAddiereTag(); void fAddiereTage(int n); void fSubtrahiereTag(); void fSubtrahiereTage(int n); }; int main(int argc, _TCHAR* argv[]) { MeinDatum test; // MeinDatum test2(1, 12, 1004);
------ Erstellen gestartet: Projekt: testkonsole, Konfiguration: Debug Win32 ------ Kompilieren... testkonsole.cpp Verknüpfen... testkonsole.obj : error LNK2019: Nicht aufgelöstes externes Symbol '"public: __thiscall MeinDatum::MeinDatum(void)" (??0MeinDatum@@QAE@XZ)', verwiesen in Funktion '_main' Debug/testkonsole.exe : fatal error LNK1120: 1 unaufgelöste externe Verweise Das Build-Protokoll wurde unter "file://c:\Dokumente und Einstellungen\Jens Doof\Eigene Dateien\Visual Studio Projects\testkonsole\Debug\BuildLog.htm" gespeichert. testkonsole - 2 Fehler, 0 Warnung(en) ---------------------- Fertig ---------------------- Erstellen: 0 erfolgreich, 1 fehlgeschlagen, 0 übersprungen
-
John Doe schrieb:
Wenn du keinen eigenen Konstruktur erstellst, dann wird automatisch ein
Standardkonstruktor erstellt => dein Programm würde funktionieren.
Wenn du jedoch einen eigenen Konstruktor erstellst, dann wird NICHT mehr
automatisch ein Standardkonstruktor erstellt => dein Programm funktioniert
nicht mehr, weil der benötigte Standardkonstruktor nicht vorhanden ist.mfg JJ
??? Wie soll der S t a n d a r t - Konst r uk tor aussehen? Der tut doch nix, oder?
-
In der Deklaration hast du ja jetzt 2 Konstruktoren, wo aber ist denn die
Definition bzw. wie sieht sie aus.mfg JJ
-
class MeinDatum { ... // Das ist der Standard-Konstruktor // und ich würde ihn zur Initialsierung // deiner Member verwenden. ;) MeinDatum() : t(0), m(0), j(0) {}; }; int main() { // und hier wird er aufgerufen, d.h. // damit die nachfolgende Zeile compiliert werden // kann muss es einen Standard-Konstruktor geben. :) MeinDatum test; }
mfg JJ
-
okay, das mit dem konstruktor hab ich jetzt verstanden.
public: // Konstruktor MeinDatum(int a, int b, int c){ t=a; m=b; j=c; } /* ... */ int main(int argc, _TCHAR* argv[]) { MeinDatum test(1, 2, 3);
wo schreib ich nun die funktionen, die ich in public deklariert habe rein?
gehört das auch in den klassenteil? oder wohin? sorry, in dem c++-buch ist das total doof erklärt.void fAddiereJahr(); void fAddiereJahre(int n); void fSubtrahiereJahr(); void fSubtrahiereJahre(int n); void fAddiereMonat(); void fAddiereMonate(int n); /* ... */
-
Man hat "üblicherweise" für jede Klasse einen Headerfile mit der Deklaration
und einen Sourcefile für die Definitionen. Direkt im Header schreibt man seine
Definitionen "normalerweise" nicht. Es sei denn, die Funktionen sind einfach
bzw. recht kurz. Man nennt solche Funktionen dann inline-Funktionen.
Wenn du diese Infos nicht in deinem Buch findest dann solltest du es entsorgen
teuer kanns dann nämlich auch nicht gewesen sein. Hier im Forum findest du
verschiedene Links sowohl zu Büchern als auch zu Tutorials.mfg JJ
-
sorry, bin wohl zu dooof dafür.
void fAddiereJahr()
{
j++;
}soll in die klasse. auch in den public-teil? funkt nicht.
das buch ist von bjarne, aber ich habe probleme mit dem englischen, da es so komplex ist.
-
Hat man dir also den Stroustrup "aufgeschwätzt".
Das Buch ist schon ganz gut, aber absolut nichts für Einsteiger bzw.
Anfänger. Kauf dir zum Lernen wirklich was anderes.MeinDatum.h
class MeinDatum { int t, m, j; public: // Konstruktor MeinDatum(); MeinDatum(int, int, int); void fAddiereJahr(); void fAddiereJahre(int n); void fSubtrahiereJahr(); void fSubtrahiereJahre(int n); void fAddiereMonat(); void fAddiereMonate(int n); void fSubtrahiereMonat(); void fSubtrahiereMonate(int n); void fAddiereTag(); void fAddiereTage(int n); void fSubtrahiereTag(); void fSubtrahiereTage(int n); }; ...
MeinDatum.cpp
... void MeinDatum::fAddiereJahr() { ... } ...
mfg JJ
-
super, jetzt hab ich's verstanden! danke !!!
werd' dann mal ein bisschen üben gehen.
BIG THANX!