Probleme bei einer Methode ein char array auszugeben
-
- Du gibst das 101. Zeichen vom Array bezeichnung zurück.
- Dummerweise hat das Array aber nur 100 Zeichen.
- Sind
char
-Arrays sog. C-Strings. Die willst du gar nicht benutzen. strcpy_s
ist eine andere Funktion alsstrcpy
. D.h. sie hat auch andere Parameter.- 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 Keywordconst
an."Zeichenketten"
sind konstant und können automatisch in einconst char *
umgewandelt werden. Es wäre also ok, wenn dein Konstruktor einenconst char *
für die Bezeichnung nehmen würde. Include<string>
, entferne<cstring>
/<string.h>
. Ersetzechar bezeichnung [100];
durchstd::string bezeichnung
. Dasstrcpy
benötigst du nicht mehr, stattdessen einfachbezeichnung = hBezeichnung
.Und noch ein paar Dinge:
int LesenNummer(void);
(und andere): dasvoid
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.
-
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.
-
-
Dieser Beitrag wurde gelöscht!
-
@manni66 sagte in Probleme bei einer Methode ein char array auszugeben:
das string kein Element von std ist,
#include <string>
okay habs in dem header war es nicht drin...
-
Okay habs zum laufen gebracht vielen vielen dank ich murks dann mal weiter mein Programm zusammen.
Hast mir jedenfalls sehr geholfen !