Ich find den Fehler nicht :( (MS Visual Studio 2005 Express)



  • Hallo,

    Visual Studio 2005 haut immer folgenden Fehler raus

    ------ Neues Erstellen gestartet: Projekt: GradeBook, Konfiguration: Debug Win32 ------
    Die Zwischen- und Ausgabedateien für das Projekt "GradeBook" mit der Konfiguration "Debug|Win32" werden gelöscht.
    Kompilieren...
    main.cpp
    d:\eigene dateien\visual studio 2005\projects\programmieren1_praktikum2\gradebook\main.cpp(10) : error C2661: 'GradeBook::GradeBook': Keine überladene Funktion akzeptiert 2 Argumente
    d:\eigene dateien\visual studio 2005\projects\programmieren1_praktikum2\gradebook\main.cpp(11) : error C2661: 'GradeBook::GradeBook': Keine überladene Funktion akzeptiert 2 Argumente
    gradebook.cpp
    d:\eigene dateien\visual studio 2005\projects\programmieren1_praktikum2\gradebook\gradebook.cpp(7) : error C2061: Syntaxfehler: Bezeichner 'dozent'
    d:\eigene dateien\visual studio 2005\projects\programmieren1_praktikum2\gradebook\gradebook.cpp(10) : error C2065: 'dozent': nichtdeklarierter Bezeichner
    Code wird generiert...
    Das Buildprotokoll wurde unter "file://d:\Eigene Dateien\Visual Studio 2005\Projects\Programmieren1_Praktikum2\GradeBook\Debug\BuildLog.htm" gespeichert.
    GradeBook - 4 Fehler, 0 Warnung(en)
    ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

    Und ich find den Fehler nicht 😞

    mein code lautet wie folgt

    gradebook.h

    #include <string>
    using std::string;
    
    class GradeBook
    {
    public:
       GradeBook( string ); 
       void setCourseName( string );
       string getCourseName();
       void setCourseDozent ( string );
       string getCourseDozent();
       void displayMessage();
    private:
       string courseName;
       string courseDozent;
    };
    

    gradebook.cpp

    #include <iostream>
    using std::cout; 
    using std::endl;
    
    #include "gradebook.h"
    
    GradeBook::GradeBook( string name, dozent )
    {
       setCourseName( name );
       setCourseName( dozent);
    }
    
    void GradeBook::setCourseName( string name )
    {
       courseName = name;
    }
    
    string GradeBook::getCourseName()
    {
       return courseName;
    }
    
    void GradeBook::setCourseDozent( string dozent )
    {
       courseDozent = dozent;
    }
    
    string GradeBook::getCourseDozent()
    {
       return courseDozent;
    }
    
    void GradeBook::displayMessage()
    {
       cout << "Welcome to the grade book for\n" << getCourseName() 
          << "!" << endl;
    }
    

    und main.cpp

    #include <iostream>
    using std::cout; 
    using std::endl;
    
    #include "gradebook.h"
    
    int main()
    {
       GradeBook gradeBook1( "CS101 Introduction to C++ Programming" "Mayer");
       GradeBook gradeBook2( "CS102 Data Structures in C++" "Weber");
    
       cout << "gradeBook1 initial name is: " << gradeBook1.getCourseName()
    	   <<endl
          << "gradeBook1 dozent is: " << gradeBook1.getCourseDozent()
    	   << "\ngradeBook2 initial name is: " << gradeBook2.getCourseName() 
          << endl
    	  << "gradeBook1 dozent is: " << gradeBook1.getCourseDozent()
    	  <<endl;
    
       gradeBook1.setCourseName( "CS101 C++Programming" );
    
       cout << "gradeBook1's course name is: " << gradeBook1.getCourseName()
          << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() 
          << endl;
    
       return 0;
    }
    

    Bin ich zu blind oder zu blöd?



  • ...und die Definitionen vom Konstruktor, von getCourseName und setCourseName? Soll sich der Compiler die ausdenken? 😉



  • Wo ist die GradeBook.cpp? (der Fehler sieht danach aus, daß du die Implementierung der GradeBook-Methoden unterschlagen hast)



  • Hallo,

    ja ich warn bißchen vorschnell *schäm*

    Habs oben editiert und hab nu auch ne andere Fehlermeldung 😕

    KAnn mir jemand sagen was ich falsch mach?



  • Erstens: Du hast einen Ctor, der einen string erwartet, deklariert, übergibst der Klasse aber zwei string's (das besagen die beiden C2661 Meldungen).

    Zweitens: Anders als bei Variablendefinitionen mußt du in der Parameterliste für jeden Eintrag seinen Typ angeben. ( GradeBook(string name,dozent) erwartet zwei Parameter vom Typ string und dozent (letzter bekommt keinen Namen) - und da 'dozent' kein Typ ist, erhältst du C2061 und C2065 - richtig wäre GradeBook(string name, string dozent) (und in der Klassendeklaration auch GradeBook(string,string); ))



  • Also ohne das ich mir jetzt den ganzen Quellcode angeschaut habe würde ich mal sagen es liegt daran das du hier string vergessen hast

    GradeBook::GradeBook( string name, dozent )
    
    GradeBook::GradeBook( string name, string dozent )
    

    und hier das Komma fehlt

    GradeBook gradeBook1( "CS101 Introduction to C++ Programming" "Mayer");
       GradeBook gradeBook2( "CS102 Data Structures in C++" "Weber");
    
    GradeBook gradeBook1( "CS101 Introduction to C++ Programming", "Mayer");
       GradeBook gradeBook2( "CS102 Data Structures in C++", "Weber");
    


  • Hallo,

    habe nun das Problem, dass der initialisierte Course Name der Dozentenname ist und der dozentenname leer bleibt 😞

    gradebook.h

    #include <string>
    using std::string;
    
    class GradeBook
    {
    public:
       GradeBook( string , string ); 
       void setCourseName( string );
       string getCourseName();
       void setCourseDozent ( string );
       string getCourseDozent();
       void displayMessage();
    private:
       string courseName;
       string courseDozent;
    };
    

    gradebook.cpp

    #include <iostream>
    using std::cout; 
    using std::endl;
    
    #include "gradebook.h"
    
    GradeBook::GradeBook( string name, string dozent )
    {
       setCourseName( name );
       setCourseName( dozent);
    }
    
    void GradeBook::setCourseName( string name )
    {
       courseName = name;
    }
    
    string GradeBook::getCourseName()
    {
       return courseName;
    }
    
    void GradeBook::setCourseDozent( string dozent )
    {
       courseDozent = dozent;
    }
    
    string GradeBook::getCourseDozent()
    {
       return courseDozent;
    }
    
    void GradeBook::displayMessage()
    {
       cout << "Welcome to the grade book for\n" << getCourseName() 
          << "!" << endl;
    }
    

    main.cpp

    #include <iostream>
    using std::cout; 
    using std::endl;
    
    #include "gradebook.h"
    
    int main()
    {
       GradeBook gradeBook1( "CS101 Introduction to C++ Programming" ,  "Mayer");
       GradeBook gradeBook2( "CS102 Data Structures in C++" , "Weber");
    
       cout << "gradeBook1 initial name is: " << gradeBook1.getCourseName()
    	   <<endl
          << "gradeBook1 dozent is: " << gradeBook1.getCourseDozent()
    	   << "\ngradeBook2 initial name is: " << gradeBook2.getCourseName() 
          << endl
    	  << "gradeBook1 dozent is: " << gradeBook1.getCourseDozent()
    	  <<endl;
    
       gradeBook1.setCourseName( "CS101 C++Programming" );
    
       cout << "gradeBook1's course name is: " << gradeBook1.getCourseName()
          << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() 
          << endl;
    
       return 0;
    }
    


  • ThaRealMatix schrieb:

    habe nun das Problem, dass der initialisierte Course Name der Dozentenname ist und der dozentenname leer bleibt 😞

    Naja, du solltest vielleich auch mal setCourseDozent aufrufen, und nicht zweimal setCourseName.



  • Übrigens mußt du innerhalb der Klasse nicht die getter/setter verwenden, um auf deine Datenelemente zuzugreifen.



  • Hm... naja ich kann mich ja eigentlich nur daran halten, was der Prof da offensichtlich erwartet ^^

    Ich habs nun soweit nur kann ich die DisplayMessage nicht aufrufen. Sie selbst scheint keinen Fehler zu haben, nur mein aufruf selbst

    cout << "gradeBook1's course name is: " << gradeBook1.getCourseName()
          << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() 
          << endl
    	  << gradeBook1.displayMessage()
    	  << gradeBook2.displayMessage()
    	  <<endl;
    


  • Hint: displayMessage ist als void deklariert, gibt also nichts zurück. In diesem Zusammenhang versuchst Du also, nichts auf den Bildschirm zu schreiben.



  • hm... einfach als string definieren geht nicht... ich weiss ich müste es wissen, aber ich such mich in meinem buch blöd.

    womit könnte ich es denn ausgeben? Mit String schonmal nicht dafür ists ja offensichtlich net deklariert ^^



  • displayNessage() gibt doch schon selber aus, das mußt du überhaupt nicht an den Stream übergeben, sondern direkt aufrufen:

    cout<<"Buch: "<<gradeBook1.getName()<<endl;
    gradeBook1.displayMessage();
    

    Alternativ kannst du die Nachricht, die du in displayMessage() ausgibst, auch zu einem String zusammenfassen und zurückgeben (aber dann würde ich darüber nachdenken, die Methode umzutaufen).



  • many thx 🙂


Anmelden zum Antworten