C++ Programmieren OOP



  • Hallo wieder einmal .
    Ich habe gerade wieder Compiler Fehler die ich einfach nicht weg bekomme .
    Sicherheitshalber poste ich auch Aufgabe:
    https://imgur.com/a/U8SFwCw
    https://imgur.com/a/Rcm0ica

    Hier code:

    
    #ifndef CTEMPSENSOR_H_
    #define CTEMPSENSOR_H_
    #include <iostream>
    #include<string>
    
    
    
    enum tSensorType{GENERAL,WATER,OIL,AIR};
    
    class CTempSensor
    {
    
    private:
    
    
    
    	float m_last24hrsTemp[24]; // array of last 24 measurements [vorgegeben]
    	float m_minTemp;           // minimum Temp of last 24hrs [vorgegeben]
    	float m_maxTemp;           // maximum Temp of last 24hrs [vorgegeben]
    	void calculateMinMaxTemp();
    	double claculateMeanTemp();
    	tSensorType m_sensorType;
    	void generateSensorType();
    
    
    public:
    	CTempSensor(float maxTemp = 0, float minTemp = 0);
    	virtual ~CTempSensor();
        double getMaxTemp() const;
        double getMinTemp() const;
    	void retrieveLastMeasurements();  // erzeugt 24 Zufallswerte [vorgegeben]
    	void print();                     // gibt die Messdaten aus [vorgegeben]
    	float checkTempRange(float, float); // [vorgegeben]
        std::string getSensorTypeAsString():
        friend std::ostream& operator<< (std::ostream& out, const CTempSensor& rop);
    };
    std::ostream& operator<<  (std::ostream& out, const CTempSensor& rop);
    
    #endif /* CTEMPSENSOR_H_ */
    
    

    jetzt cpp

    
    #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::claculateMeanTemp(){
    
    	double durchschnitt = 0;
    	durchschnitt = (m_maxTemp+m_minTemp)/(2);
    
    
    }
    
    	std::string CTempSensor::getSensorTypeAsString(){
    		   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
    'this' argument to member function 'getSensorTypeAsString' has type 'const CTempSensor', but function is not marked const	CTempSensor.cpp	/Temperatur	line 133	C/C++ Problem
    expected '('	CTempSensor.h	/Temperatur	line 42	C/C++ Problem
    Invalid overload of 'endl'	CTempSensor.cpp	/Temperatur	line 133	Semantic Error
    make: *** [CTempSensor.o] Error 1	Temperatur		 	C/C++ Problem
    Member declaration not found	CTempSensor.cpp	/Temperatur	line 100	Semantic Error
    Method 'calculateMeanTemp' could not be resolved	CTempSensor.cpp	/Temperatur	line 133	Semantic Error
    Method 'getSensorTypeAsString' could not be resolved	CTempSensor.cpp	/Temperatur	line 133	Semantic Error
    no member named 'calculateMeanTemp' in 'CTempSensor'	CTempSensor.cpp	/Temperatur	line 133	C/C++ Problem
    No return, in function returning non-void	CTempSensor.cpp	/Temperatur	line 92	Code Analysis Problem
    'getSensorTypeAsString' declared here	CTempSensor.cpp	/Temperatur	line 100	C/C++ Problem
    
    

    Bitte um Hilfe



  • @Programmer33

    Bitte um Hilfe

    Das ist jetzt nicht dein Ernst ...


  • Banned

    @manni66 sagte in C++ Programmieren OOP:

    @Programmer33

    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.


Log in to reply