Klasse und Konstruktor



  • Sorry, bin Anfänger! 🙄

    class MeinDatum {
    	int t, m, j;
    
    public:
    
    	// Konstruktor
    	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;
    /* ... */
    
    ------ Erstellen gestartet: Projekt: testkonsole, Konfiguration: Debug Win32 ------
    
    Kompilieren...
    testkonsole.cpp
    c:\Dokumente und Einstellungen\Jens Doof\Eigene Dateien\Visual Studio Projects\testkonsole\testkonsole.cpp(69) : error C2512: 'MeinDatum': Kein geeigneter Standardkonstruktor verfügbar
    
    Das Build-Protokoll wurde unter "file://c:\Dokumente und Einstellungen\Jens Doof\Eigene Dateien\Visual Studio Projects\testkonsole\Debug\BuildLog.htm" gespeichert.
    testkonsole - 1 Fehler, 0 Warnung(en)
    
    ---------------------- Fertig ----------------------
    
        Erstellen: 0 erfolgreich, 1 fehlgeschlagen, 0 übersprun
    

    ich kann mit der fehlermeldung nix anfangen. 🙄



  • Der Konstruktor hat 3 Parameter, also musst du auch 3 parameter angeben.

    MeinDatum test(13, 11, 2004);



  • 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! 😃


Anmelden zum Antworten