我一直在尝试编写一个温度转换程序来教自己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
答案 0 :(得分:1)
该行
if (temperatureCalculator, setTemperature (InputReading, temperatureformat))
似乎对我很怀疑。为什么temperatureCalculator
和setTemperature
之间有逗号?你的意思是用“点”(.
)代替调用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)
您的代码遇到了很多问题:
static
(不是真正的问题,但使用C ++ 03警告)setTemperature()
。main()
的定义移到课堂外。int main()
更改为int main(void)
。char temperatureformat = 0
代替char temperatureformat = NULL
。, setTemperature
更改为.setTemperature
。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;
}
答案 4 :(得分:0)
在课程结尾添加;
时,在课程中添加一些函数定义:
错误(活动)类“温度”没有成员“getCelsius”69
double getCelsius()
{
return Celsius;
}
错误(活动)类“温度”没有成员“getFahrenheit”70
double getFahrenheit()
{
return Fahrenheit;
}
错误(活动)类“温度”没有成员“getKelvin”71
double getKelvin()
{
return Kelvin;
}