2015-11-07 544 views
0

我一直在尝试编写一个温度转换程序来教自己如何在C++中将任何给定的温度输入(摄氏度,华氏度和开氏温度)转换为另外两个值然后输出所有三个值再次。然而,我无法让我的项目进行编译,而我自己也很难找到错误。 (相信我,我已经尝试了一整天)。 如果有人可以请看看它,并提出任何建议/改进,我将不胜感激。顺便说一句,不要在我的代码中写任何注释。温度转换程序C++

#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 
+1

带行号的编译错误列表将帮助 –

+1

开始将主类放在类外 – wimh

+1

_'class“Temperature”没有成员“getCelsius”_ _所以你可以添加一个成员'getCelsius'? – wimh

回答

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; 
     } 
    } 
+0

请注意,'setTemperature'不会返回任何内容 - 这将会出现问题。 – erip

+0

非常感谢您......非常感谢您花时间帮助! –

1

线

if (temperatureCalculator, setTemperature (InputReading, temperatureformat)) 

显得可疑了我。为什么在temperatureCalculatorsetTemperature之间有逗号?你是否想要在你的Temperature类实例temperatureCalculator上使用'点'(.)而不是调用类方法setTemperature

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

+0

非常感谢,这是我的错误。我用一个点替换了逗号,但它没有改变我从编译器收到的错误信息。 :/ –

+0

正如其他人提到的那样,您需要 - 在类定义的末尾放置一个半冒号';'(在上面贴出的代码中,紧跟在最后一行的右括号'}'后面 - 将你的'main'块剪切并粘贴到类定义之外(将'main'放在类定义之下) - 在类getCelsius,getFahrenheit和getKelvin中定义它们 - 现在可以为空,但为每个编写一个框架以使编译器开心 –

1

这条线,也许?

if (temperatureCalculator, setTemperature (InputReading, temperatureformat)) 

我不确定你在用那个逗号做什么。你可能想要放一段时间。您还需要在课程末尾放置分号(在最后一个大括号之后)。最后,你应该把你的主要方法放在文件末尾,在课堂之外。

0

你有很多问题,你的代码:

  1. 更改转换常数static(不是一个真正的问题,但与C++ 03警告)
  2. 初始化在构造函数中的局部变量,而不是在课堂上定义。 (在C++ 03中警告)
  3. 为本地变量定义getter。
  4. setTemperature()返回值。
  5. 在班级以外移动main()的定义。
  6. 在类定义之后添加分号。
  7. 更改int main()int main(void)
  8. 使用char temperatureformat = 0而不是char temperatureformat = NULL
  9. 更改, setTemperature.setTemperature
  10. 在函数名后加上括号(必需)。
  11. 添加main()的返回值。

所有这些都是由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; 
} 
0

前缀的一些函数的定义与;添加到您的除了班级在上课结束评论:

错误(活动)班“温度“has no member”getCelsius“69

double getCelsius() 
    { 
     return Celsius; 
    } 

误差(活性)类 “温度” 没有成员 “getFahrenheit” 70

double getFahrenheit() 
{ 
    return Fahrenheit; 
} 

误差(活性)类 “温度” 没有成员 “getKelvin” 71

double getKelvin() 
{ 
    return Kelvin; 
}