Probleme bei einer Methode ein char array auszugeben



    1. Du gibst das 101. Zeichen vom Array bezeichnung zurück.
    2. Dummerweise hat das Array aber nur 100 Zeichen.
    3. Sind char-Arrays sog. C-Strings. Die willst du gar nicht benutzen.
    4. strcpy_s ist eine andere Funktion als strcpy. D.h. sie hat auch andere Parameter.
    5. Schalte den Warnlevel vom Compiler auf Maximum und beseitige die Ursache für die Warnungen.


  • @Quiche-Lorraine sagte in Probleme bei einer Methode ein char array auszugeben:

    Bitte nimm kein char* als String-Datentyp sondern std::string.

    
    std::string CWare::LesenBezeichnung(void)
    {
    	return bezeichnung
    
    }
    

    Danke schon mal für die sehr schnellen Antworten!

    Wie muss da dann mein Konstruktor & protected "bezeichnung" aussehen? Hab jetzt einiges durchprobiert, kommen aber nur noch Fehlermeldungen..



  • #pragma once
    
    #include <string>
    
    
    class CWare
    {
    public:
        //Konstruktor Ware in Nummer - Bezeichnung - Volumen
        CWare(unsigned long int hIdentNr, const std::string& hBezeichnung, double hVolumen);
        ~CWare();
    
    //METHODEN
        std::string LesenBezeichnung(void);
        int LesenNummer(void);
        double LesenLadevolumen(void);
    
    protected:
        unsigned long int identNr;
        std::string bezeichnung;
        double volumen;
    };
    
    
    //Konstruktor
    CWare::CWare(unsigned long int hIdentNr, const std::string& hBezeichnung, double hVolumen)
    {
        identNr = hIdentNr;
        bezeichnung = hBezeichnung;     // Setze hier mal einen Breakpoint und debugge die Funktion. Du wirst überrascht sein was = bedeuten kann.
        volumen = hVolumen;
    }
    
    
    CWare::~CWare()
    {
    }
    
    
    //Methoden
    std::string CWare::LesenBezeichnung(void)
    {
        return bezeichnung;
    }
    
    int CWare::LesenNummer(void)
    {
        return identNr;
    }
    
    double CWare::LesenLadevolumen(void)
    {
        return volumen;
    }
    
    


  • Ich fürchte, wir haben hier wieder das übliche Problem, dass hier von jemandem, der sich irgendwann mal C angeschaut hat, schlechts C++ geleht wird.

    Ist das bei dir der Fall? Dann müsste man die Fehler beheben und den Code irgendwie zum Laufen bringen. Oder möchtest du Ratschläge, wie es in C++ besser ginge?

    CWare wHyd = {3005 ,(char*)"Hydraulikpumpe",2.8,}; das "(char*)" ist ein C-Style-Cast, diese sollte man in C++ unbedingt vermeiden (und auch in C sollte dieser Cast hier nicht stehen). Schau dir stattdessen mal das Keyword const an. "Zeichenketten" sind konstant und können automatisch in ein const char * umgewandelt werden. Es wäre also ok, wenn dein Konstruktor einen const char * für die Bezeichnung nehmen würde. Include <string>, entferne <cstring> / <string.h>. Ersetze char bezeichnung [100]; durch std::string bezeichnung. Das strcpy benötigst du nicht mehr, stattdessen einfach bezeichnung = hBezeichnung.

    Und noch ein paar Dinge:

    • int LesenNummer(void); (und andere): das void innerhalb der Klammern ist überflüssig. Lösche es (in C benötigst du das void, in C++ nicht): Also: int LesenNummer();
    • Dein Destruktor ist leer. Du brauchst ihn also nicht. Also kannst du ihn komplett löschen.
    • Im Konstruktor kannst du alternativ/besser auch direkt die Variablen initialisieren:
    CWare::CWare(unsigned long int hIdentNr, const char *hBezeichnung, double hVolumen)
        : identNr{hIdentNr}, 
          bezeichnung{hBezeichnung}, 
          volumen{hVolumen}
    {}
    

    Du kannst da sogar das h weglassen: CWare::CWare(unsigned long int identNr, ...) : identNr{identNr}, ...

    • ich würde dir raten, Klassen mit einem Großbuchstaben und Funktionen&Variablen mit einem Kleinbuchstaben beginnen zu lassen sowie das C vor Klassennamen zu entfernen (ist kein Zwang und jeder mag andere Geschmäcker haben...)


  • @wob sagte in Probleme bei einer Methode ein char array auszugeben:

    Ich fürchte, wir haben hier wieder das übliche Problem

    Stinkt gewaltig danach. Der Originalcode vom OP is sowieso nicht rettbar.



  • @wob

    Das schlecht gelehrte C++ kommt dann wohl von meinem Prof.. hab mit den Mitteln die mir beigebracht worden sind versucht das Projekt so zu machen..

    Hab das jetzt mal alles so umgeschrieben und rumprobiert aber ständig kommt dann die Fehlermeldung das string kein Element von std ist, beim protected std::string bezeichnung. Dazu dann in der gleichen Zeile noch ein unbekannter Überschreibungsspezifizierer.



  • @derVale

    das string kein Element von std ist,

    #include <string>

    Doku lesen



  • This post is deleted!


  • @manni66 sagte in Probleme bei einer Methode ein char array auszugeben:

    @derVale

    das string kein Element von std ist,

    #include <string>

    Doku lesen

    okay habs in dem header war es nicht drin...



  • @wob

    Okay habs zum laufen gebracht vielen vielen dank ich murks dann mal weiter mein Programm zusammen.

    Hast mir jedenfalls sehr geholfen !


Log in to reply