Programmierung objektorientiert
-
Mittlerweile ein wenig weiter .
Aber viele Fehler bei der if bedingung
Alles neuland für mich#include "CTitle.h" #include <string> #include<iostream> using namespace std; CTitle::CTitle(int contentSize, int duration, string name, string performer, int bitRate) { //Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. if (bitRate >= 32000 && bitRate <= 320000) { m_contentSize = contentSize; m_duration = duration; m_bitRate = bitRate; } else { //Falls diese Zusicherung verletzt wird, werden die Attribute //m_bitRate, m_duration und m_contentSize auf 0 gesetzt. m_contentSize = 0; m_duration = 0; m_bitRate = 0; } } string CTitle::getName() const { return m_name; } string CTitle::getPerformer() const { return m_performer; } int CTitle::getDuration() const { return m_duration; } double CTitle::getContentsize(){ return m_contentSize; } ostream& operator<< (ostream& lop, CTitle& rop){ lop<< &rop << " " << rop.getName(); lop<< "; " << rop.getPerformer(); lop<< " ; " << rop.getDuration(); lop << " s"; //Ausgabe um s erweitert if (rop.m_contentSize > 9999 * 1024){ // > 9999 KiB lop << rop.m_contentSize / (1024 * 1024) << " MiB"; } else if (rop.m_contentSize > 9999){ // > 9999 B{ lop << rop.m_contentSize / 1024 << " KiB"; } else{ lop << rop.m_contentSize << " B" } } return lop; }
header
#ifndef CTITLE_H_ #define CTITLE_H_ #include <string> using namespace std; /** * Diese Klasse beschreibt einen MP3-kodierten Titel (Song). */ class CTitle { private: /** Name (Titel) des Songs */ string m_name; /** Ausführende(r) (Interpret, Gruppe, Orchester o. ä.) */ string m_performer; /** Die Dauer des Titels in Sekunden. */ int m_duration; /** Die Bitrate in bit/s. */ int m_bitRate; /** Die Größe (Anzahl der Bytes) der Audiodaten. */ int m_contentSize; public: /** * Erzeugt ein neues Objekt, dessen Attribute mit den angegebenen * Werten initialisiert werden. * * Falls Name oder Ausführende(r) (performer) leer sind, werden * die Default-Werte verwendet. * * Die Angabe der Bitrate erfolgt in bit/s. * * Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. * Falls diese Zusicherung verletzt wird, werden die Attribute * m_bitRate, m_duration und m_contentSize auf 0 gesetzt. */ CTitle(int contentSize = 0, int duration = 0, string name = "(Untitled)", string performer = "(Unknown)", int bitRate = 128000); /** * Diese Methode liefert den Namen des Titels. */ string getName() const; /** * Diese Methode liefert den Ausführenden (Performer). */ string getPerformer() const; /** * Diese Methode liefert die Dauer (Länge) des Titels in Sekunden. */ int getDuration() const; double getContentsize(); }; ostream& operator<< (ostream& lop, CTitle& rop); #endif /* CTITLE_H_ */
Description Resource Path Location Type
'int CTitle::m_contentSize' is private CTitle.h /CTitle line 34 C/C++ Problem
expected ';' before '}' token CTitle.cpp /CTitle line 64 C/C++ Problem
expected declaration before '}' token CTitle.cpp /CTitle line 69 C/C++ Problem
expected unqualified-id before 'return' CTitle.cpp /CTitle line 67 C/C++ Problem
within this context CTitle.cpp /CTitle line 56 C/C++ Problem
within this context CTitle.cpp /CTitle line 57 C/C++ Problem
within this context CTitle.cpp /CTitle line 59 C/C++ Problem
within this context CTitle.cpp /CTitle line 60 C/C++ Problem
within this context CTitle.cpp /CTitle line 63 C/C++ Problem
-
Damit die Operator-Funktion auf private Member zugreifen kann, muß sie mit der Klasse befreundet sein:
class CTitle { // ... // wichtig: innerhalb der Klasse deklarieen friend ostream& operator<< (ostream& lop, CTitle& rop); };
Oder aber du benutzt besser gleich die getContentsize() Funktion innerhalb des Operators (wie bei den anderen Membern ja auch)!
Diese Funktion sollte dann aber auch 'const' sein und beim Stream-Operator solltest du dann "const CTitle&" benutzen.Und die restlichen Syntaxfehler solltest du selber lösen können.
PS: Ungarische Notation solltest du vermeiden (d.h. statt CTitel einfach Title).
-
WIe bekomme ich die fehler in der if bedingung weg ?
-
Im gezeigten Code hast du ein ';' zu wenig und eine '}' zuviel.
-
#include "CTitle.h" #include <string> #include<iostream> using namespace std; CTitle::CTitle(int contentSize, int duration, string name, string performer, int bitRate) { //Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. if (bitRate >= 32000 && bitRate <= 320000) { m_contentSize = contentSize; m_duration = duration; m_bitRate = bitRate; } else { //Falls diese Zusicherung verletzt wird, werden die Attribute //m_bitRate, m_duration und m_contentSize auf 0 gesetzt. m_contentSize = 0; m_duration = 0; m_bitRate = 0; } } string CTitle::getName() const { return m_name; } string CTitle::getPerformer() const { return m_performer; } int CTitle::getDuration() const { return m_duration; } double CTitle::getContentsize(){ return m_contentSize; } ostream& operator<< (ostream& lop, CTitle& rop){ lop<< &rop << " " << rop.getName(); lop<< "; " << rop.getPerformer(); lop<< " ; " << rop.getDuration(); lop << " s"; //Ausgabe um s erweitert if (rop.m_contentSize > 9999 * 1024){ // > 9999 KiB lop << rop.m_contentSize / (1024 * 1024) << " MiB"; } else if (rop.m_contentSize > 9999){ // > 9999 B{ lop << rop.m_contentSize / 1024 << " KiB"; } else{ lop << rop.m_contentSize << " B" } return lop; }
Finde den anderen Fehler nicht
-
Dann nimmst du die erste Zeilnenummer der Fehlermeldung und suchst nach oben.
Nebenbei: name und performer im Konstruktor willst du nicht verwenden?
-
Was ist an dem contentSize falsch solch ich es als int lassen ?
Die int methode war so gegeben anhand der Aufgabe.
Die get Methode habe ich als double implementiert selbst?
Oder soll ich beides int lassen ?
Mir nicht so klar.
#ifndef CTITLE_H_ #define CTITLE_H_ #include <string> using namespace std; /** * Diese Klasse beschreibt einen MP3-kodierten Titel (Song). */ class CTitle { private: /** Name (Titel) des Songs */ string m_name; /** Ausführende(r) (Interpret, Gruppe, Orchester o. ä.) */ string m_performer; /** Die Dauer des Titels in Sekunden. */ int m_duration; /** Die Bitrate in bit/s. */ int m_bitRate; /** Die Größe (Anzahl der Bytes) der Audiodaten. */ int m_contentSize; public: /** * Erzeugt ein neues Objekt, dessen Attribute mit den angegebenen * Werten initialisiert werden. * * Falls Name oder Ausführende(r) (performer) leer sind, werden * die Default-Werte verwendet. * * Die Angabe der Bitrate erfolgt in bit/s. * * Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. * Falls diese Zusicherung verletzt wird, werden die Attribute * m_bitRate, m_duration und m_contentSize auf 0 gesetzt. */ CTitle(int contentSize = 0, int duration = 0, string name = "(Untitled)", string performer = "(Unknown)", int bitRate = 128000); /** * Diese Methode liefert den Namen des Titels. */ string getName() const; /** * Diese Methode liefert den Ausführenden (Performer). */ string getPerformer() const; /** * Diese Methode liefert die Dauer (Länge) des Titels in Sekunden. */ int getDuration() const; double getContentsize(); }; ostream& operator<< (ostream& lop, CTitle& rop); #endif /* CTITLE_H_ */
-
Hä?
-
Deutsch wäre ein guter Ansatz.
-
Was meint ihr mit deutsch ?
-
cbaby schrieb:
Was ist an dem contentSize falsch solch ich es als int lassen ?
[...]
Die get Methode habe ich als double implementiert selbst?Und lass das plenken sein.
EDIT: Und Satzfragmente sind auch ganz, ganz schlecht für das Verständnis. Deutsch ist eine relativ präzise Sprache, also nutze sie auch, dein Problem präzise zu beschreiben.
-
Der Compiler zeigt bei int contentSize einen Fehler ?
Warum ?
-
Ich würd' mal sagen, weil da ein Fehler ist.
Sag mal, willst du uns verarschen, oder bist du so naiv?
-
Nein .Meine frage war habe ich es richtig gemacht das ich die get Methode für die AUfgabe als double implementiert habe ?
Aber ich werde die get methode jetzt einfach als int lassen ,da es im header so vorgegeben ist.