класс — программа преобразования температуры Stack Overflow

Я пытался написать программу преобразования температуры, чтобы научить себя, как работает система классов в 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

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

Другие решения

Линия

if (temperatureCalculator, setTemperature (InputReading, temperatureformat))

Мне кажется подозрительным. Почему между запятой temperatureCalculator а также setTemperature? Вы имели в виду «точку» (.) вместо того, чтобы вызвать метод класса setTemperature на ваше Temperature экземпляр класса temperatureCalculator?

Если вы опубликуете фактическую ошибку, мы можем помочь больше. Удачи!

1

Эта линия, может быть?

if (temperatureCalculator, setTemperature (InputReading, temperatureformat))

Я не уверен, что вы пытаетесь сделать с этой запятой там. Вы, вероятно, хотите вместо этого поставить точку. Вам также нужно поставить точку с запятой в конце вашего класса (после последней фигурной скобки). И, наконец, вы должны поместить свой метод main в конец файла, вне класса.

1

Добавьте некоторые определения функций в ваш класс в дополнение к ; в конце урока:

У ошибки (активного) класса «Температура» нет члена «getCelsius» 69

double getCelsius()
{
return Celsius;
}

Класс ошибки (активный) класса «Temperature» не имеет члена «getFahrenheit» 70

double getFahrenheit()
{
return Fahrenheit;
}

Класс ошибки (активный) класса «Temperature» не имеет члена «getKelvin» 71

double getKelvin()
{
return Kelvin;
}
0

У вас было много проблем с вашим кодом:

  1. Измените константы преобразования на static (на самом деле не проблема, но предупреждает с C ++ 03)
  2. Инициализируйте локальные переменные в конструкторе, а не в определении класса. (предупреждает в C ++ 03)
  3. Определите геттеры для локальных переменных.
  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
По вопросам рекламы [email protected]