C++ Programmieren OOP
-
@manni66 sagte in C++ Programmieren OOP:
Bitte um Hilfe
Das ist jetzt nicht dein Ernst ...
Doch, er will dass du Fehler in seinem Code findest, weil er allein nicht weiter kommt.
-
ja leider . Oder sind die Fehler trivial und ich sehe nix ?
-
Wo liegt denn der Fehler ?
-
@Programmer33 sagte in C++ Programmieren OOP:
Wo liegt denn der Fehler ?
Der? Das sind offensichtlich mehrere. Wie ich schon vor ein paar Tage sagte:
Diese Fentser in den IDEs, in denen die Fehlermeldungen zusammengefasst werden, sind ja ganz nett. Du solltest dir aber auch die Original Compiler Ausgabe ansehen.
@Programmer33 sagte in C++ Programmieren OOP:
ja leider . Oder sind die Fehler trivial und ich sehe nix ?
Ja
-
#include "CTempSensor.h" #include <iostream> // Header fuer die Standard-IO-Objekte (z.B. cout, cin) #include <cstdlib> // fuer random values #include <iomanip> // fuer setw() #include <string> using namespace std; // Erspart den scope vor Objekte der // C++-Standard-Bibliothek zu schreiben // z.B. statt "std::cout" kann man "cout" schreiben CTempSensor::CTempSensor(float maxTemp,float minTemp) { m_maxTemp = maxTemp; m_minTemp = minTemp; retrieveLastMeasurements(); calculateMinMaxTemp(); } // generiert 24 Zufallswerte zw. 5 und 95 Grad [vorgegeben] void CTempSensor::retrieveLastMeasurements() { for (int i=0; i<24;i++) { m_last24hrsTemp[i] = (rand() % 900 + 50) / (float)10; } } // gibt min/max und die 24 Messwerte aus [vorgegeben] void CTempSensor::print() { cout << "min: " << m_minTemp << " | max: " << m_maxTemp << " | Letzte 24 Messwerte: "; for (int i=0; i<24;i++) { cout << setw(4) << m_last24hrsTemp[i] << " | " ; } cout << endl; } // gibt den Prozentsatz der Werte in der Range zurueck [gegeben fuer Aufgane 3c] float CTempSensor::checkTempRange(float low, float high) { int inRange = 0; int outOfRange = 0; for (int i=0; i<24;i++) { if (m_last24hrsTemp[i] < low || m_last24hrsTemp[i] > high) { outOfRange++; } else { inRange++; } } return 100*inRange/24.; } CTempSensor::~CTempSensor() { // TODO Auto-generated destructor stub } void CTempSensor::calculateMinMaxTemp(){ m_minTemp = m_last24hrsTemp[0]; m_maxTemp = m_last24hrsTemp[0]; for(int i = 1; i < 24 ; i++) { if(m_last24hrsTemp[i] > m_maxTemp) m_maxTemp = m_last24hrsTemp[i]; if(m_last24hrsTemp[i] < m_minTemp) m_minTemp = m_last24hrsTemp[i]; } } double CTempSensor::calculateMeanTemp(){ double durchschnitt = 0; durchschnitt = (m_maxTemp+m_minTemp)/(2); } std::string CTempSensor::getSensorTypeAsString(){ std::string result; switch(m_sensorType){ case WATER: result = "WATER"; break; case GENERAL: result = "GENERAL"; break; case OIL: result = "OIL"; break; case AIR: result = "AIR"; break; } return result; } double CTempSensor::getMaxTemp() const{ return m_maxTemp; } double CTempSensor::getMinTemp() const{ return m_minTemp; } ostream& operator<< (std::ostream& out, const CTempSensor& rop){ out<< "Typ:"<< rop.getSensoreTypeAsString() << "min:" << rop.getMinTemp() << "" <<"max:" << rop.getMaxTemp() << ""<< "Durchschnitt:"<< rop.calculateMeanTemp() << endl; return out; }
Paar Fehler habe ich gefunden ,aber beim operator wird immer noch getTypeAsStr... und bei calculateMeanTemp angezeigt ?
Soll ich eine getter für meantemp erstellen bei public?
Mit return m_durschnitt ?
-
Du solltest alle Buchstaben in der selben Reihenfolge und nicht mehr oder weniger oder andere verwenden .
-
#include "CTempSensor.h" #include <iostream> // Header fuer die Standard-IO-Objekte (z.B. cout, cin) #include <cstdlib> // fuer random values #include <iomanip> // fuer setw() #include <string> using namespace std; // Erspart den scope vor Objekte der // C++-Standard-Bibliothek zu schreiben // z.B. statt "std::cout" kann man "cout" schreiben CTempSensor::CTempSensor(float maxTemp,float minTemp) { m_maxTemp = maxTemp; m_minTemp = minTemp; retrieveLastMeasurements(); calculateMinMaxTemp(); } // generiert 24 Zufallswerte zw. 5 und 95 Grad [vorgegeben] void CTempSensor::retrieveLastMeasurements() { for (int i=0; i<24;i++) { m_last24hrsTemp[i] = (rand() % 900 + 50) / (float)10; } } // gibt min/max und die 24 Messwerte aus [vorgegeben] void CTempSensor::print() { cout << "min: " << m_minTemp << " | max: " << m_maxTemp << " | Letzte 24 Messwerte: "; for (int i=0; i<24;i++) { cout << setw(4) << m_last24hrsTemp[i] << " | " ; } cout << endl; } // gibt den Prozentsatz der Werte in der Range zurueck [gegeben fuer Aufgane 3c] float CTempSensor::checkTempRange(float low, float high) { int inRange = 0; int outOfRange = 0; for (int i=0; i<24;i++) { if (m_last24hrsTemp[i] < low || m_last24hrsTemp[i] > high) { outOfRange++; } else { inRange++; } } return 100*inRange/24.; } CTempSensor::~CTempSensor() { // TODO Auto-generated destructor stub } void CTempSensor::calculateMinMaxTemp(){ m_minTemp = m_last24hrsTemp[0]; m_maxTemp = m_last24hrsTemp[0]; for(int i = 1; i < 24 ; i++) { if(m_last24hrsTemp[i] > m_maxTemp) m_maxTemp = m_last24hrsTemp[i]; if(m_last24hrsTemp[i] < m_minTemp) m_minTemp = m_last24hrsTemp[i]; } } double CTempSensor::calculateMeanTemp(){ double durchschnitt = 0; durchschnitt = (m_maxTemp+m_minTemp)/(2); } std::string CTempSensor::getSensorTypeAsString(){ std::string result; switch(m_sensorType){ case WATER: result = "WATER"; break; case GENERAL: result = "GENERAL"; break; case OIL: result = "OIL"; break; case AIR: result = "AIR"; break; } return result; } double CTempSensor::getMaxTemp() const{ return m_maxTemp; } double CTempSensor::getMinTemp() const{ return m_minTemp; } ostream& operator<< (std::ostream& out, const CTempSensor& rop){ out<< "Typ:"<< rop.getSensorTypeAsString() << "min:" << rop.getMinTemp() << "" <<"max:" << rop.getMaxTemp() << ""<< "Durchschnitt:"<< rop.calculateMeanTemp() << endl; return out; }
Description Resource Path Location Type 'calculateMeanTemp' is a private member of 'CTempSensor' CTempSensor.cpp /Temperatur line 135 C/C++ Problem 'this' argument to member function 'calculateMeanTemp' has type 'const CTempSensor', but function is not marked const CTempSensor.cpp /Temperatur line 135 C/C++ Problem 'this' argument to member function 'getSensorTypeAsString' has type 'const CTempSensor', but function is not marked const CTempSensor.cpp /Temperatur line 135 C/C++ Problem expected '(' CTempSensor.h /Temperatur line 44 C/C++ Problem Invalid arguments ' Candidates are: double calculateMeanTemp() ' CTempSensor.cpp /Temperatur line 134 Semantic Error Invalid overload of 'endl' CTempSensor.cpp /Temperatur line 134 Semantic Error make: *** [CTempSensor.o] Error 1 Temperatur C/C++ Problem Member declaration not found CTempSensor.cpp /Temperatur line 101 Semantic Error Method 'getSensorTypeAsString' could not be resolved CTempSensor.cpp /Temperatur line 134 Semantic Error No return, in function returning non-void CTempSensor.cpp /Temperatur line 93 Code Analysis Problem 'calculateMeanTemp' declared here CTempSensor.cpp /Temperatur line 93 C/C++ Problem 'getSensorTypeAsString' declared here CTempSensor.cpp /Temperatur line 102 C/C++ Problem declared private here CTempSensor.h /Temperatur line 29 C/C++ Problem
bekomme immer noch Fehler ?
Komme nicht weiter ?
-
@Programmer33 Bitte nicht so oft wichtige Hinweise von den Leuten hier ignorieren. Hier nochmal zum mitschreiben:
@manni66 sagte in C++ Programmieren OOP:
Diese Fentser in den IDEs, in denen die Fehlermeldungen zusammengefasst werden, sind ja ganz nett. Du solltest dir aber auch die Original Compiler Ausgabe ansehen.
Diese Original-Ausgabe befindet sich bei vielen IDEs in einem Tab rechts neben dem Tab, wo du diese Fehlermeldungen herauskopiert hast und heißt meist "Output" oder "Build Output" oder "Compiler Output".
Neuere GCC-Versionen geben teilweise ziemlich gute Fehlermeldungen aus, die in diesen Zusammenfassungen leider oft nur zerstückelt und unvollständig angezeigt werden.
Du sabotierst dich hier selbst, wenn du den Leuten, die eventuell helfen könnten, diese Fehlerausgabe des Compilers vorenthältst. Ich denke hier hat kaum einer Lust, deinen Code manuell zu parsen.
-
ich habe ein const hier eingebaut und alle Fehler weg ?double CTempSensor::calculateMeanTemp() const{
?
Aber in der Aufgabe stand es nicht ,dass es const sein soll?
Warum ?
-
Du rufst die Memberfunktion auf einer const-Referenz auf:
ostream& operator<< (std::ostream& out, const CTempSensor& rop){ out<< "Typ:"<< rop.getSensorTypeAsString() << "min:" << rop.getMinTemp() << "" <<"max:" << rop.getMaxTemp() << ""<< "Durchschnitt:"<< rop.calculateMeanTemp() << endl; return out; }
Auf einer const-Referenz kann man nur Memberfunktionen aufrufen, die const-qualifiziert sind.