Objekt und Klassen- Func außerhalb definieren
-
Hi, Leute,
ich habe mich jetzt an die Objekte ran gemacht.Folgendes:
Mein Code wo ich die Funktionen in der Klasse definiert habe funktioniert wunderbar!
Also,#include <iostream.h> #include <stdlib.h> #include <conio.h> class Klasse { private: int Variable; public: void setzeVariable(int was) { Variable = was; }; void info(void) { cout << "Die Variable traegt im Moment den Wert " << Variable << endl; } }; Klasse Objekt; int neuerwert; void main(void) { while(true) { system("cls"); cout << "Gib jetzt den Wert ein, den DEINE Variable in DEINEM Objekt tragen soll!"<<endl; cout << "Beachte, dass es eine Zahl sein muss!"<<endl; cout << "Gib \"0\" ein wenn das Programm beendet werden soll..."<<endl; cin >> neuerwert; Objekt.setzeVariable(neuerwert); Objekt.info(); getch(); if( neuerwert == 0 ) break; }; cout << "\n\n\nDas war das Testprogramm! Du bist fertig!"<<endl; getch(); };
Mir ist zum Training nichts originelleres eingaefallen
So, jetzt wollte ich aber mal so zum Spaß info() ausßerhalb definieren...
#include <iostream.h> #include <stdlib.h> #include <conio.h> class Klasse { private: int Variable; public: void setzeVariable(int was) { Variable = was; }; void info(void); } void Klasse::info(void) { cout << "Die Variable traegt im Moment den Wert " << Variable << endl; }; Klasse Objekt; int neuerwert; void main(void) { while(true) { system("cls"); cout << "Gib jetzt den Wert ein, den DEINE Variable in DEINEM Objekt tragen soll!"<<endl; cout << "Beachte, dass es eine Zahl sein muss!"<<endl; cout << "Gib \"0\" ein wenn das Programm beendet werden soll..."<<endl; cin >> neuerwert; Objekt.setzeVariable(neuerwert); Objekt.info(); getch(); if( neuerwert == 0 ) break; }; cout << "\n\n\nDas war das Testprogramm! Du bist fertig!"<<endl; getch(); };
Jetzt erhalte ich aber eine Fehlermeldung
...
--------------------Konfiguration: Objekte - Win32 Debug-------------------- Kompilierung läuft... CRocket.cpp ...\CRocket.cpp(18) : error C2628: 'Klasse' gefolgt von 'void' unzulaessig (Semikolon ';' vergessen?) ...\CRocket.cpp(19) : error C2556: 'class Klasse __thiscall Klasse::info(void)' : Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'void __thiscall Klasse::info(void)' ...\CRocket.cpp(15) : Siehe Deklaration von 'info' ...\CRocket.cpp(19) : error C2371: 'info' : Neudefinition; unterschiedliche Basistypen ...\CRocket.cpp(15) : Siehe Deklaration von 'info' ...\CRocket.cpp(37) : error C2264: 'info' : Fehler in der Funktionsdefinition oder Funktionsdeklaration, Funktion nicht aufgerufen Fehler beim Ausführen von cl.exe. Objekte.exe - 4 Fehler, 0 Warnung(en)
Wie muss ich das jetzt richtig machen...?
thX
robotangelP.S.
Warukm ich die cpp CRocket genannt habe?
Keine Ahnung...
-
Wie der Compiler schon erraten hat, fehlt da ein Semikolon hinter der Klassendefinition.
class Klasse
{
...
};
-
Öhm, mal ausprobieren obs klappt...
Joa, klappt, THX!!
Woher kommen dann eigentlich die anderen Fehlermeldungen, klar, ein paar kommen nur deshalb wel er info() nicht definiert hat, aber sonst ?!
-
Die meisten Fehler sind oft nur Folgefehler, entscheident ist immer der erste.
-
Jaja, das programmieren. Aus einem Fehler werden neun und wenn man(n) pech hat sind auch noch 4 Warungen dazwischen..
Neues Problem:
CRocket.h#include <iostream.h> #include <string> class Rocket { private: int Geschwindigkeit; char planet[255]; public: void GeschwindigkeitFestlegen(int NeueGeschwindigkeit); void info(void); void PlanetFestlegen(char Planet[255]); };
func.cpp
#include "CRocket.h" void Rocket::GeschwindigkeitFestlegen(int NeueGeschwindigkeit) { Geschwindigkeit = NeueGeschwindigkeit; }; void Rocket::info() { cout << "Die Rackete bewegt sich mit einer Geschwindigkeit von " << Geschwindigkeit << " km/h auf den Planeten " << planet << " zu!"<<endl; }; void Rocket::PlanetFestlegen(char Planet[255]) { strcpy( Planet, planet); };
main.cpp
#include "CRocket.h" Rocket Objekt; void main(void) { Objekt.PlanetFestlegen("Venus"); Objekt.GeschwindigkeitFestlegen(40000); Objekt.info(); Objekt.GeschwindigkeitFestlegen(70000); Objekt.info(); Objekt.PlanetFestlegen("Telsia 5"); Objekt.GeschwindigkeitFestlegen(9); Objekt.info(); Objekt.PlanetFestlegen("Mars"); Objekt.GeschwindigkeitFestlegen(1000000); Objekt.info(); };
Na, die Profis können raten was jetz kommt...
0Fehler 0Warungen
Das Problem kommt erst bei start
"Die Anweisung in "<Speicheradresse>" verweist auf Spiecher in "<Speicheradresse>". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden"
Na toll
PLEAZE HELP!!
thX
PS
Womit sich das CRocket geklärt hätte;)
-
#include <string>
das mud so sein
#include <string.h>
so compilierts dann jedenfalls beimir!!!
P.S.: die Semikolons
hinter der Mainfunktion und den ubrigen Funktionsdefinitionen bei Dir sin d Leere Anweisungen habsch mal gehört => EXE wird dadurch grösser
so siehts besser ausvoid Rocket::GeschwindigkeitFestlegen(int NeueGeschwindigkeit) { Geschwindigkeit = NeueGeschwindigkeit; }// Semikolon war hier zuviel void Rocket::info(void) // !!! Parameter wie bei Klassendeklaration //hatste vergessen es gibt Compiler die verzeihen sowas nisch { cout << "Die Rackete bewegt sich mit einer Geschwindigkeit von " << Geschwindigkeit << " km/h auf den Planeten " << planet << " zu!"<<endl; } // Semikolon war hier zuviel void Rocket::PlanetFestlegen(char Planet[255]) { strcpy( Planet, planet); }// Semikolon war hier zuviel void main(void) { Objekt.PlanetFestlegen("Venus"); Objekt.GeschwindigkeitFestlegen(40000); Objekt.info(); Objekt.GeschwindigkeitFestlegen(70000); Objekt.info(); Objekt.PlanetFestlegen("Telsia 5"); Objekt.GeschwindigkeitFestlegen(9); Objekt.info(); Objekt.PlanetFestlegen("Mars"); Objekt.GeschwindigkeitFestlegen(1000000); Objekt.info(); } // Semikolon war hier zuviel
Eine Klassendeklaration endet jedoch immer mit Semikolon!!!! Siehe dein
erster Feheler von deinen Eingangsthema!!!mfg sclearscreen
-
Also bei mir lief auch so wie's war alles. Nur: die Syntax bei strcpy war falschrum. Andersrum gingsdann //So wie von dir geschrieben