Finde einfach kein Fehler
-
Guten Tag,
Bin noch sehr in den Anfängen bei C++ und lerne mit hilfe von Video2Brain .
Hat bisher alles geklappt nun jetzt bin ich bei dem Thema OBjekte im Heap.
so habe ich auch Verstanden nur anscheind muss irgentwo ein Fehler drin sein..#include <cstdlib> #include <iostream> #include <string> // Klasse Person class Person { // Eigenschaften public: string vorname; string name; // Funktionen // INstruktor Person(string v, string n) ; // Destruktor ~Person() ; string getName() ; } ; Person::Person(string v, string n) : vorname(v), name(n) { } ; Person::~Person() { cout << " Profil wurde geschlossen ( " << getName() << " ) " << endl; } ; string getName() { return vorname + " " name ; } ; using namespace std; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
SO den ersten Fehler zeigt er an die Zeile wo steht string vorname;
Hm er meint im Compiler Log:
13 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp `string' does not name a typeDas versteh ich schon nicht ich habe ja die String klasse oben mit eingebunden..
Dieser Fehler kommt öfter bei mir. Nur andere ZeilenSo ein Fehler kommt auch öfter:
19 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp expected `)' before "v"Dann ein andere Fehler ist auch noch:
33 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp `cout' undeclared (first use this function)
Hm habe iostream includet.. Drotzdem geht es nicht. ALso dachte ich mir vlt das der Compile evt. kaputt ist ich machte ein Neues Projekt und schrieb einfach mal ein kleines Hello World mit Cout und Strings.. Hat geklappt.Bitte helft mir ich finde einfach den Fehler nicht.
Compiler Log:
Compiler: Default compiler Building Makefile: "C:\Users\René\C++ FIles\Tutorial\HeapObjekte\Makefile.win" Führt make... aus make.exe -f "C:\Users\René\C++ FIles\Tutorial\HeapObjekte\Makefile.win" all g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" main.cpp:13: error: `string' does not name a type main.cpp:14: error: `string' does not name a type main.cpp:19: error: expected `)' before "v" main.cpp:23: error: `string' does not name a type main.cpp:26: error: expected `)' before "v" main.cpp:26: error: expected `,' or `;' before "v" main.cpp: In destructor `Person::~Person()': main.cpp:33: error: `cout' undeclared (first use this function) main.cpp:33: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:33: error: `getName' undeclared (first use this function) main.cpp:33: error: `endl' undeclared (first use this function) main.cpp: At global scope: main.cpp:36: error: `string' does not name a type make.exe: *** [main.o] Error 1 Ausführung beendet
-
using namespace std; früher ansetzen.
MfG
-
chea77er schrieb:
Guten Tag,
Bin noch sehr in den Anfängen bei C++ und lerne mit hilfe von Video2Brain .
Hat bisher alles geklappt nun jetzt bin ich bei dem Thema OBjekte im Heap.
so habe ich auch Verstanden nur anscheind muss irgentwo ein Fehler drin sein..#include <cstdlib> #include <iostream> #include <string> // Klasse Person class Person { // Eigenschaften public: string vorname; string name; // Funktionen // INstruktor Person(string v, string n) ; // Destruktor ~Person() ; string getName() ; } ; Person::Person(string v, string n) : vorname(v), name(n) { } ; Person::~Person() { cout << " Profil wurde geschlossen ( " << getName() << " ) " << endl; } ; string getName() { return vorname + " " name ; } ; using namespace std; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
SO den ersten Fehler zeigt er an die Zeile wo steht string vorname;
Hm er meint im Compiler Log:
13 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp `string' does not name a typeDas versteh ich schon nicht ich habe ja die String klasse oben mit eingebunden..
Dieser Fehler kommt öfter bei mir. Nur andere ZeilenSo ein Fehler kommt auch öfter:
19 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp expected `)' before "v"Dann ein andere Fehler ist auch noch:
33 C:\Users\René\C++ FIles\Tutorial\HeapObjekte\main.cpp `cout' undeclared (first use this function)
Hm habe iostream includet.. Drotzdem geht es nicht. ALso dachte ich mir vlt das der Compile evt. kaputt ist ich machte ein Neues Projekt und schrieb einfach mal ein kleines Hello World mit Cout und Strings.. Hat geklappt.Bitte helft mir ich finde einfach den Fehler nicht.
Compiler Log:
Compiler: Default compiler Building Makefile: "C:\Users\René\C++ FIles\Tutorial\HeapObjekte\Makefile.win" Führt make... aus make.exe -f "C:\Users\René\C++ FIles\Tutorial\HeapObjekte\Makefile.win" all g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" main.cpp:13: error: `string' does not name a type main.cpp:14: error: `string' does not name a type main.cpp:19: error: expected `)' before "v" main.cpp:23: error: `string' does not name a type main.cpp:26: error: expected `)' before "v" main.cpp:26: error: expected `,' or `;' before "v" main.cpp: In destructor `Person::~Person()': main.cpp:33: error: `cout' undeclared (first use this function) main.cpp:33: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:33: error: `getName' undeclared (first use this function) main.cpp:33: error: `endl' undeclared (first use this function) main.cpp: At global scope: main.cpp:36: error: `string' does not name a type make.exe: *** [main.o] Error 1 Ausführung beendet
So es heißt erstens Konstruktor und nicht INstruktor als zweites heißt es nicht nur string sondern
std::string
als nächstes musst du das hier
string getName() { return vorname + " " name ; } ;
in das hier ändern
std::string Person::getName() { return vorname + " " name ; }
und lass mal die ; nach deinen Methoden weg.
P.S. Kauf dir lieber ein ordentliches Buch, als Video2Brain
-
ach shi* hab ja gar net gesehen das Using NameSpace std; erst nach den Klasse kommen...
Danke für die schnelle Hilfe
-
chea77er schrieb:
so habe ich auch Verstanden nur anscheind muss irgentwo ein Fehler drin sein..
Mehrere Anmerkungen:
// #include <cstdlib> => Benutzt du nirgendwo, wenn ich es richtig sehe... #include <iostream> #include <string> // Klasse Person class Person { public: // Eigenschaften // => Normalerweise private (Geheimnisprinzip) std::string vorname; // string liegt im Namensraum std std::string name; // Funktionen // Konstruktor // => nicht "INstruktor" // => Objekte besser als "const Reference" als per Wert übergeben // (unnötige Kopien vermeiden) // => sprechende Namen sind hilfreich Person( std::string const & vorname, std::string const & nachname); // Destruktor ~Person(); // Getter/Setter // => Methoden die keine Werte ändern sollten const deklariert sein std::string getName() const; }; Person::Person( std::string const & vorname, std::string const & nachname) : vorname(vorname), name(nachname) { } // => Hier ist kein Semikolon nötig Person::~Person() { std::cout << " Profil wurde geschlossen ( " << getName() << " ) " << std::endl; } std::string getName() const { return vorname + " " + name; // => Ein + vergessen } // => using namespace std würde die Notwendigkeit der Angabe des // Namensraumes entfernen, sollte aber niemals vor includes und // niemals im Header stehen. Da normalerweise Klassen in separaten // Header/Source-Dateien untergebracht werden, habe ich das nicht // nach oben verschoben, um es dir gleich abzugewöhnen! using namespace std; // => Sofern du die Übergabeparameter nicht brauchst, würde // ich die einfachere Schreibweise vorziehen, und auch einen // Returnwert brauchst du bei der main-Funktion nicht, da diese // implizit 0 zurückgibt. int main() { // => C/C++ Alternative zu system("PAUSE") siehe FAQ (DOS/Konsole), // unter "Automatisches Schließen verhindern". system("PAUSE"); }
cu André
-
oh vielen dank asc | André