Klasse



  • Hallo liebe Gemeinde.

    Um zu verstehen, wie ich in C++ eine Klasse programmieren kann, habe ich folgendes Beispiel abgeschrieben:

    #include <iostream>
    using namespace std;
    
    class Cat
    {
    public:
    	int GetAge();
    	void SetAge (int age);
    	void Meow();
    private:
    	int itsAge;
    };
    //Die oeffentliche Zugriffsfunktion GetAge gibt
    //den Wert des Datenelements itsAge zurück
    int Cat::GetAge()
    {
    	return itsAge;
    }
    // Definition der oeffentlichen Zugriffsfunktion SetAge
    // gibt Datenelement itsAge zurück
    void Cat::SetAge(int age)
    {
    	//Elementvariable itsAge auf den als 
    	//Parameter age uebergebenen Wert setzen
    	itsAge = age;
    }
    
    //Definition der Methode Meow
    //Rueckgabe: void
    //Parameter: keine
    //Aktion:	 Gibt "meow" auf dem Bildschirm aus
    void Cat::Meow()
    {
    	cout << "Miau.\n";
    }
    int main()
    {
    	Cat Frisky;
    	Frisky.SetAge(5);
    	Frisky.Meow();
    	cout << "Frisky ist eine Katze, die ";
    	cout << Frisky.GetAge() << " Jahre alt ist." << endl;
    	Frisky.Meow();
    	return 0;
    }
    

    Das komische ist nur, dass ich folgende Fehlermeldungen bekomme:

    Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup".	d:\Benutzer\maximilian\eigene dokumente\visual studio 2010\Projects\CPP - Programmierung\Listing 06.02 - Klasse mit Zugriffsmethoden\MSVCRTD.lib(crtexe.obj)	Listing 06.02 - Klasse mit Zugriffsmethoden
    Fehler	2	error LNK1120: 1 nicht aufgelöste externe Verweise.	d:\benutzer\maximilian\eigene dokumente\visual studio 2010\Projects\CPP - Programmierung\Debug\Listing 06.02 - Klasse mit Zugriffsmethoden.exe	Listing 06.02 - Klasse mit Zugriffsmethoden
    Fehler	3	error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in "d:\benutzer\maximilian\eigene dokumente\visual studio 2010\projects\cpp - programmierung\eigene übung 020-klasse elvis implementieren\klasse elvis implementieren.cpp(5)" gefunden wurde	d:\benutzer\maximilian\eigene dokumente\visual studio 2010\projects\cpp - programmierung\eigene übung 020-klasse elvis implementieren\klasse elvis implementieren.cpp	8	1	Eigene Übung 020-Klasse Elvis implementieren
    Fehler	4	error LNK2001: Nicht aufgelöstes externes Symbol "_mainCRTStartup".	d:\Benutzer\maximilian\eigene dokumente\visual studio 2010\Projects\CPP - Programmierung\Eigene Übung 019 - Einfache Klasse\LINK	Eigene Übung 019 - Einfache Klasse
    Fehler	5	error LNK1120: 1 nicht aufgelöste externe Verweise.	d:\benutzer\maximilian\eigene dokumente\visual studio 2010\Projects\CPP - Programmierung\Debug\Eigene Übung 019 - Einfache Klasse.exe	Eigene Übung 019 - Einfache Klasse
    

    Kann mir vielleicht jemand helfen??

    Danke schon mal im Voraus.

    Gruß

    Max



  • Der Code ist korrekt. Ich habs gerade unter MSVC und gcc getestet. Sollte einwandfrei funktionieren.

    Am Code selber liegt es nicht.



  • Irgendwie spackt grad bei mir Microsoft Visual Studio 2010 ab.

    Leider kann ich nicht sagen woran das liegt.

    Edit:

    Ich habe jetzt folgenden Programmcode geschrieben:

    #include <iostream>
    using namespace std;
    
    class Hund
    {
    public:
    	int GetAge();
    	void SetAge(int age);
    	void Meow();
    
    private:
    	int itsAge;
    };
    
    int Hund::GetAge()
    {
    	return itsAge;
    }
    
    void SetAge(int age)
    {
    	itsAge = age;
    }
    
    void Hund::Meow()
    {
    	cout << "Wuff!" << endl;
    }
    int main()
    {
    	Hund Elvis;
    	Elvis.SetAge(20);
    	Elvis.Meow();
    	cout << "Elvis ist mein Hund, der ";
    	cout << Elvis.GetAge() << " Monate alt ist." << endl;
    	Elvis.Meow();
    	return 0;
    }
    

    Es kommen die gleichen Fehlermeldungen wie beim ersten Programmcode. Kennt sich jemand mit Microsoft Visual Studio 2010 Ultimate aus?? Ich kann mir nicht erklären, wo die Fehlermeldungen herkommen.



  • Hab kein VS. Das sieht aber so aus als hättest du unter deinem VS nicht C++ und Console als Zielprojekt gewählt 😕

    Was kann VS dafür, wenn du es nicht richtig nutzt 😃



  • Ich bin wie folgt vorgegangen

    Rechtsklick auf Projektmappe
    -> Hinzufügen
    -> Neues Projekt
    -> Win32-Konsolenanwendung + Name des Projekts
    -> Lerres Projekt angeklickt
    -> Rechtsklick auf Projekt
    -> Hinzufügen
    -> Neues Element
    -> C++ - Datei
    -> Programmcode

    Ich wüsste nicht, was daran verkehrt sein soll.



  • Was passiert denn, wenn du einfach mal zum Test deinen Programmcode mit

    int main() {}
    

    ersetzt. Kommen dann immer noch dieselben Fehler?



  • Ja es kommen die selben Fehlermeldungen.

    Ok, ich habe statt

    int main{}
    

    dieses Progrämmchen geschrieben:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	cout << "Hello World!" << endl;
    
    	return 0;
    }
    

    Keine Ahnung woran das liegt, weil am Programm an sich habe ich nichts verändert.

    Die Fehlermeldungen sind jedoch die Gleichen.



  • hast du es mal mit einem neuen projekt versucht? bzw. benutzte mal rebuild oder clean und dann build.



  • So... jetzt habe ich die Projektmappe bereinigt und habe ein älteres Projekt kompiliert. Ging einwandfrei.

    Bloß beim Debuggen des älteren Projekts kommen immer noch die selben Fehlermeldungen.

    Wenn ich dann bei der Meldung

    "Fehler beim Erst. Möchn Sie denn Vorgang fortsetzen und den letzten erfolgreichen Build ausführen"

    auf "Ja" klicke, dann funktioniert das ältere Programm doch.

    Hier ist das ältere Programm:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int x = 5, y = 7;
    	cout << endl;
    	cout << x + y << " " << x*y;
    	cout << endl;
    
    	return 0;
    }
    

    Nachdem ich bei der Fehlermeldung auf "Ja" klicke, kommt beim Konsolenfenster als Ausgabe "12 35".

    Ich kann es mir einfach nicht erklären...



  • Nimm einfach code::blocks stattdessen. Wenn mich eins beim programmieren aufregt, dann das zeit verschwenden mit IDEs



  • Namenloser324 schrieb:

    Nimm einfach code::blocks stattdessen. Wenn mich eins beim programmieren aufregt, dann das zeit verschwenden mit IDEs

    Warum dann CodeBlocks und nicht einfach:

    cl /EHsc prog.cpp

    ?



  • Das Subsystem ist auf Windows(Fensteranwendung) gestellt, es muss auf Console oder nix stehen. Eigenschaft des Projekts -> Linker -> System -> Subsystem.



  • Ich raff es nicht, woher oder warum diese Fehlermeldungen kommen.



  • Mäxchen
    was sollen wir denn noch schreiben 😕

    Zeus hat es dir noch mal geschrieben. Zappel nicht herum, arbeite in Ruhe einen Schritt nach dem anderen ab.

    Du hast in der IDE noch "Windows" stehen wo "Console" hin soll. Nein, nicht in deinem Quelltext, sondern bei der Einstellung deiner IDE.

    Wenn du da nur wild mit der Maus herum machst, zerdepperst du noch mehr. Also in Ruhe dran und erst überlegen und dann klicken.

    Ist bei den anderen IDEn aber nicht wesentlich anders, wenn die ein wenig umfangreicher sind. In der genannten C::B fallen mir aus dem Stegreif auch 3 Stellen ein, wo ich Compiler und Linker beeinflussen kann. Auch da sollte man wissen, wann man welche Einstellung vornimmt.

    MfG f.-th.


Anmelden zum Antworten