Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Fehlersuche Projekt Auto

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.01.2018, 16:35 Uhr
SaBit



Ich hab das folgende Beispiel aus einem Programmieren lernen Buch. womöglich hab ich auch einen Teil falsch abgeschrieben, zumindest bekomme ich folgende fehlermeldungen:


Code:
auto.cpp:17:40: error: expected ',' or '...' before numeric constant
void Auto::set_leistung(unsigned short 1){
                                        ^
auto.cpp:47:16: error: prototype for 'short unsigned int Auto::get_leistung() const' does not match any in class 'Auto'
unsigned short Auto::get_leistung() const {
                ^
In file included from auto.cpp:3:0:
Auto.h:13:20: error: candidate is: short unsigned int Auto::get_leistung()
     unsigned short get_leistung();
                    ^
auto.cpp:51:16: error: prototype for 'short unsigned int Auto::get_baujahr() const' does not match any in class 'Auto'
unsigned short Auto::get_baujahr() const{
                ^
In file included from auto.cpp:3:0:
Auto.h:14:20: error: candidate is: short unsigned int Auto::get_baujahr()
     unsigned short get_baujahr();
                    ^
auto.cpp:55:16: error: prototype for 'short unsigned int Auto::get_hoechstgeschwindigkeit() const' does not match any in class 'Auto'
unsigned short Auto::get_hoechstgeschwindigkeit() const {
                ^
In file included from auto.cpp:3:0:
Auto.h:15:20: error: candidate is: short unsigned int Auto::get_hoechstgeschwindigkeit()
     unsigned short get_hoechstgeschwindigkeit();
                    ^


ich arbeite mit https://www.onlinegdb.com/online_c++_compiler

das ist das programm:


C++:
//main
#include <iostream>
#include "Auto.h"
using namespace std;

int main()
{
    Auto oldtimer;
    unsigned short val;
    
    cout << "Leistung : ";
    cin >> val;
    
    oldtimer.set_leistung(val);
    cout << "Baujahr : ";
    cin >> val;
    oldtimer.set_baujahr(val);
    cout << "Hoechstgeschwindigkeit : ";
    cin >> val;
    oldtimer.set_hoechstgeschwindigkeit(val);
    
    cout << "\nDie Eingabe lautete:\n";
    cout << "Leistung : "
         << oldtimer.get_leistung() << endl;
    cout << "Baujahr : "
         << oldtimer.get_baujahr() << endl;
    cout << "Hoechstgeschw : "
         << oldtimer.get_hoechstgeschwindigkeit() << endl;
        
    return 0;
}

//Auto.h

class Auto{
    private:
    unsigned short Leistung;
    unsigned short Baujahr;
    unsigned short Hoechstgeschwindigkeit;
    public:
    void hupen();
    void bremsen();
    void fahren();
    void set_leistung(unsigned short = 0);
    void set_baujahr(unsigned short = 0);
    void set_hoechstgeschwindigkeit(unsigned short = 0);
    unsigned short get_leistung();
    unsigned short get_baujahr();
    unsigned short get_hoechstgeschwindigkeit();
};

//Auto.cpp

#include <iostream>
using namespace std;
#include "Auto.h"

void Auto::hupen(){
    cout << "Huuuuuup!!\n";
}

void Auto::bremsen(){
    cout << "Quiiiiiiiiitsch\n";
}

void Auto::fahren(){
    cout << "Tööf Tööf Brrrrumm\n";
}

void Auto::set_leistung(unsigned short 1){
    if(1 != 0){
        Leistung = 1;
    }
    else{
        cout << "0 Leistung ???\n";
        Leistung = 1;
    }
}

void Auto::set_baujahr(unsigned short bj){
    if (bj>=1900 && bj <=2018){
        Baujahr = bj;
    }
    else {
        cout << "Baujahr ??? : " << bj << endl;
        Baujahr = bj;
    }
}
    
void Auto::set_hoechstgeschwindigkeit(unsigned short h){
    if(h != 0){
        Hoechstgeschwindigkeit=h;
    }
    else{
        cout << "Hoechstgeschwindigkeit = 0 ???\n";
        Hoechstgeschwindigkeit=h;
    }
}

unsigned short Auto::get_leistung() const {
    return Leistung;
}

unsigned short Auto::get_baujahr() const{
    return Baujahr;
}

unsigned short Auto::get_hoechstgeschwindigkeit() const {
    return Hoechstgeschwindigkeit;
}




danke für die fehlersuche. ich bin mir nicht sicher ob der compiler das mit "const" hinbekommt.
das mit der 1 bei der leistung in Auto.cpp check ich auch nicht. Auch verstehe ich im Auto.h das unsigned short = 0 als parameter nicht.

danke schonma
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2018, 16:57 Uhr
SaBit



ja, tatsächlich wenn ich das const weglasse akzeptiert er das. wie kann ich das mit dem const anders schreiben?
es soll sichergangen werden dass durch die get funktion keine änderungen der private werte vorgenommen werden können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2018, 18:56 Uhr
ao

(Operator)


1. in Auto::set_leistung hast du falsch abgeschrieben, die 1 ist ein l (kleines L).

2. Das const-Attribut muss auch in der Klassendefinition hingeschrieben werden:

C++:
class Auto{
    private:
    unsigned short Leistung;
    unsigned short Baujahr;
    unsigned short Hoechstgeschwindigkeit;
    public:
    void hupen();
    void bremsen();
    void fahren();
    void set_leistung(unsigned short = 0);
    void set_baujahr(unsigned short = 0);
    void set_hoechstgeschwindigkeit(unsigned short = 0);
    unsigned short get_leistung() const;
    unsigned short get_baujahr() const;
    unsigned short get_hoechstgeschwindigkeit() const;
};



3. Mit "unsigned short = 0" definiert man einen sog. Defaultwert für diesen Parameter. Man kann also z.B. set_leistung (100) aufrufen (um die Leistung auf 100 PS zu setzen), oder man kann set_leistung() ohne Argument aufrufen und setzt damit die Leistung auf den Defaultwert (also 0) - syntaktisch ist beides richtig und wird vom Compiler akzeptiert, aber nur, wenn der Defaultwert hingeschrieben wird. Sonst ist die Angabe des Arguments zwingend.

Hierzu noch eine Anmerkung: Es ist bei weitem nicht in allen Fällen sinnvoll, einen Defaultwert zu vergeben. Dies hier ist so ein Fall. Weder für die Leistung noch für die Höchstgeschwindigkeit gibt es einen sinnvollen Defaultwert, und schon gar nicht 0.

Sinnvoller Default fürs Baujahr wäre vielleicht das aktuelle Jahr. Aber das kriegt man nicht in einen konstanten Ausdruck hinein, oder man muss das Programm jedes Jahr neu übersetzen ...

Wie man sieht, ist es gar nicht so einfach, sich schlüssige Beispielprogramme auszudenken
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: