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 type

    Das versteh ich schon nicht ich habe ja die String klasse oben mit eingebunden..
    Dieser Fehler kommt öfter bei mir. Nur andere Zeilen

    So 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 type

    Das versteh ich schon nicht ich habe ja die String klasse oben mit eingebunden..
    Dieser Fehler kommt öfter bei mir. Nur andere Zeilen

    So 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é


Log in to reply