温度转换程序c ++

时间:2015-11-07 21:11:42

标签: c++ class temperature

我一直在尝试编写一个温度转换程序来教自己c ++中的类系统如何将任何给定的温度输入(Celsius,Fahrenheit和kelvin)转换为其他两个值,然后再次输出所有三个值。但是我无法让我的项目进行编译,而且我自己也不是一个能够找到错误的新手。 (相信我,我整天都在尝试)。 如果有人可以请一看,并提出任何建议/改进,我将不胜感激。 抱歉不要在我的代码中写任何评论。

#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

class Temperature
{
private:
    const double ConversionRate = 0.55555;
    const double AbsoluteZero = 273.15;
    const int TemperatureOffset = 32;

    double InputTemperature = 0;
    double Fahrenheit = 0, Celsius = 0, Kelvin = 0;

public:
    bool setTemperature(double temperature, char temperatureformat)
    {
        bool temperatureConfigured = true;
        if (temperatureformat == 'c') {
            Celsius = temperature;
            Fahrenheit = ((1 / ConversionRate)*(Celsius)) + TemperatureOffset;
            Kelvin = Celsius + AbsoluteZero;
        }
        else if (temperatureformat == 'f') {
            Fahrenheit = temperature;
            Celsius = (ConversionRate*(Fahrenheit - TemperatureOffset));
            Kelvin = (Celsius + AbsoluteZero);
        }
        else if (temperatureformat == 'k') {
            if (temperature >= 0)
            {
                Kelvin = temperature;
                Celsius = Kelvin - AbsoluteZero;
                Fahrenheit = (1 / ConversionRate)*Celsius + TemperatureOffset;
            }
            else {
                temperatureConfigured = false;
                Celsius = 0;
                Kelvin = 0;
                Fahrenheit = 0;

            }
        }
        else {
            temperatureConfigured = false;
        }
    }

    int main()
    {
        double InputReading = 0;
        Temperature temperatureCalculator;
        char temperatureformat = NULL;

        cout << "Please Enter your temperature value" << endl;
        cin >> InputReading;
        cout << "Celsius        - c" << endl;
        cout << "Fahrenheit     - f" << endl;
        cout << "Kelvin         - k" << endl;
        cin >> temperatureformat;


        if (temperatureCalculator.setTemperature (InputReading, temperatureformat)) {
            cout << "Your temperature conversions are" << endl;
            cout << "Celsius:    " << temperatureCalculator.getCelsius() << endl;
            cout << "Fahrenheit: " << temperatureCalculator.getFahrenheit << endl;
            cout << "Kelvin:     " << temperatureCalculator.getKelvin << endl;
        }
        else {
            cout << "Error, your input was invalid" << endl;
        }
    }
}

编译错误如下:

Severity    Code    Description Project File    Line
Error (active)      class "Temperature" has no member "getCelsius"  69
Error (active)      class "Temperature" has no member "getFahrenheit" 70
Error (active)      class "Temperature" has no member "getKelvin"   71
Error (active)      expected a ';'  77
Error   C1004   unexpected end-of-file found    78

5 个答案:

答案 0 :(得分:1)

该行

if (temperatureCalculator, setTemperature (InputReading, temperatureformat))

似乎对我很怀疑。为什么temperatureCalculatorsetTemperature之间有逗号?你的意思是用“点”(.)代替调用setTemperature类实例Temperature上的类方法temperatureCalculator吗?

如果您发布实际错误,我们可以提供更多帮助。祝你好运!

答案 1 :(得分:1)

这一行,也许?

if (temperatureCalculator, setTemperature (InputReading, temperatureformat))

我不确定你在那里用逗号做什么。你可能想要换句号。您还需要在类的末尾添加分号(在最后一个大括号之后)。最后,您应该将main方法放在文件末尾,在类之外。

答案 2 :(得分:0)

有一些问题:

  • 与java不同,main将与班级分开。

  • 您缺少尝试使用的get方法。

  • 你有几个错别字。

  • 我不确定你是否真的想要私有常量。宏会更有意义。

无论如何,这里是代码(编译)。它没有经过考验,因此可以留给你作为练习。

#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

class Temperature
{
private:
    const double ConversionRate = 0.55555;
    const double AbsoluteZero = 273.15;
    const int TemperatureOffset = 32;

    double InputTemperature = 0;
    double Fahrenheit = 0, Celsius = 0, Kelvin = 0;

public:
    double getFahrenheit() { return Fahrenheit; }
    double getCelsius() { return Celsius; }
    double getKelvin() { return Kelvin; }
    bool setTemperature(double temperature, char temperatureformat)
    {
        bool temperatureConfigured = true;
        if (temperatureformat == 'c') {
            Celsius = temperature;
            Fahrenheit = ((1 / ConversionRate)*(Celsius)) + TemperatureOffset;
            Kelvin = Celsius + AbsoluteZero;
        }
        else if (temperatureformat == 'f') {
            Fahrenheit = temperature;
            Celsius = (ConversionRate*(Fahrenheit - TemperatureOffset));
            Kelvin = (Celsius + AbsoluteZero);
        }
        else if (temperatureformat == 'k') {
            if (temperature >= 0)
            {
                Kelvin = temperature;
                Celsius = Kelvin - AbsoluteZero;
                Fahrenheit = (1 / ConversionRate)*Celsius + TemperatureOffset;
            }
            else {
                temperatureConfigured = false;
                Celsius = 0;
                Kelvin = 0;
                Fahrenheit = 0;

            }
        }
        else {
            temperatureConfigured = false;
        }
    }

};

int main()
    {
        double InputReading = 0;
        Temperature temperatureCalculator;
        char temperatureformat = NULL;

        cout << "Please Enter your temperature value" << endl;
        cin >> InputReading;
        cout << "Celsius        - c" << endl;
        cout << "Fahrenheit     - f" << endl;
        cout << "Kelvin         - k" << endl;
        cin >> temperatureformat;


        if (temperatureCalculator.setTemperature (InputReading, temperatureformat)) {
            cout << "Your temperature conversions are" << endl;
            cout << "Celsius:    " << temperatureCalculator.getCelsius() << endl;
            cout << "Fahrenheit: " << temperatureCalculator.getFahrenheit() << endl;
            cout << "Kelvin:     " << temperatureCalculator.getKelvin() << endl;
        }
        else {
            cout << "Error, your input was invalid" << endl;
        }
    }

答案 3 :(得分:0)

您的代码遇到了很多问题:

  1. 将转换常量更改为static(不是真正的问题,但使用C ++ 03警告)
  2. 在构造函数中初始化局部变量,而不是在类定义中。 (在C ++ 03中警告)
  3. 定义局部变量的getter。
  4. setTemperature()
  5. 返回一个值
  6. main()的定义移到课堂外。
  7. 在类定义后添加分号。
  8. int main()更改为int main(void)
  9. 使用char temperatureformat = 0代替char temperatureformat = NULL
  10. , setTemperature更改为.setTemperature
  11. 在函数名称后添加括号(必填)。
  12. main()添加返回值。
  13. 所有这些都是以CHANGE:

    为前缀的评论
    #include <iostream>
    #include <cstring>
    #include <fstream>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    class Temperature
    {
    private:
        // CHANGE: DECLARE STATIC
        static const double ConversionRate = 0.55555;
        static const double AbsoluteZero = 273.15;
        static const int TemperatureOffset = 32;
    
        // CHANGE: USE CONSTRUCTOR BELOW INSTEAD FOR INITIALIZATION
        double InputTemperature;
        double Fahrenheit, Celsius, Kelvin;
    
    public:
        // CHANGE: DEFINE CONSTRUCTOR
        Temperature() : InputTemperature(0), Fahrenheit(0), Celsius(0), Kelvin(0) {}
    
        // CHANGE: DEFINE GETTERS
        double getFahrenheit() const {return Fahrenheit;}
        double getCelsius() const {return Celsius;}
        double getKelvin() const {return Kelvin;}
    
        bool setTemperature(double temperature, char temperatureformat)
        {
            bool temperatureConfigured = true;
            if (temperatureformat == 'c') {
                Celsius = temperature;
                Fahrenheit = ((1 / ConversionRate)*(Celsius)) + TemperatureOffset;
                Kelvin = Celsius + AbsoluteZero;
            }
            else if (temperatureformat == 'f') {
                Fahrenheit = temperature;
                Celsius = (ConversionRate*(Fahrenheit - TemperatureOffset));
                Kelvin = (Celsius + AbsoluteZero);
            }
            else if (temperatureformat == 'k') {
                if (temperature >= 0)
                {
                    Kelvin = temperature;
                    Celsius = Kelvin - AbsoluteZero;
                    Fahrenheit = (1 / ConversionRate)*Celsius + TemperatureOffset;
                }
                else {
                    temperatureConfigured = false;
                    Celsius = 0;
                    Kelvin = 0;
                    Fahrenheit = 0;
    
                }
            }
            else {
                temperatureConfigured = false;
            }
    
            // CHANGE: RETURN VALUE
            return temperatureConfigured;
        }
    
        // CHANGE: MOVE main() OUTSIDE CLASS
    }; // CHANGE: ADD SEMICOLON AFTER CLASS
    
    // CHANGE: MAKE int main(void)
    int main(void)
    {
        double InputReading = 0;
        Temperature temperatureCalculator;
        // CHANGE: MAKE 0, NOT NULL
        char temperatureformat = 0;
    
        cout << "Please Enter your temperature value" << endl;
        cin >> InputReading;
        cout << "Celsius        - c" << endl;
        cout << "Fahrenheit     - f" << endl;
        cout << "Kelvin         - k" << endl;
        cin >> temperatureformat;
    
        // CHANGE: USE . MEMBER ACCESS OPERATOR
        if (temperatureCalculator.setTemperature (InputReading, temperatureformat)) {
            cout << "Your temperature conversions are" << endl;
            cout << "Celsius:    " << temperatureCalculator.getCelsius() << endl;
            // CHANGE: ADD PARENTHESES AFTER FUNCTION NAMES
            cout << "Fahrenheit: " << temperatureCalculator.getFahrenheit() << endl;
            cout << "Kelvin:     " << temperatureCalculator.getKelvin() << endl;
        }
        else {
            cout << "Error, your input was invalid" << endl;
        }
    
        // CHANGE: RETURN VALUE
        return 0;
    }
    

答案 4 :(得分:0)

在课程结尾添加;时,在课程中添加一些函数定义:

  

错误(活动)类“温度”没有成员“getCelsius”69

double getCelsius()
    {
        return Celsius;
    }
  

错误(活动)类“温度”没有成员“getFahrenheit”70

double getFahrenheit()
{
    return Fahrenheit;
}
  

错误(活动)类“温度”没有成员“getKelvin”71

double getKelvin()
{
    return Kelvin;
}