2015-11-07 4 views
0

J'ai essayé d'écrire un programme de conversion de température pour apprendre comment le système de classe en C++ convertit une entrée de température donnée (Celsius, Fahrenheit et Kelvin) en les deux autres valeurs puis toutes les trois valeurs encore. Cependant, je n'arrive pas à compiler mon projet et je suis trop novice pour trouver moi-même les erreurs. (Croyez-moi j'ai essayé toute la journée). Si quelqu'un pouvait jeter un coup d'œil et faire des suggestions/améliorations, je l'apprécierais grandement. Excuses de ne pas avoir écrit de commentaires dans mon code d'ailleurs.Programme de conversion de température 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; 
     } 
    } 
} 

erreurs de compilation sont les suivantes:

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

Une liste des erreurs de compilation avec les numéros de ligne aiderait –

+1

à commencer par mettre principal en dehors de la classe – wimh

+1

_'class "Temperature" n'a pas de membre "getCelsius" '_ - pouvez-vous ajouter un membre' getCelsius'? – wimh

Répondre

0

Il y a quelques problèmes:

  • Contrairement à Java, main seront séparés de la classe.

  • Il vous manquait des méthodes get que vous essayiez d'utiliser.

  • Vous avez eu plusieurs fautes de frappe.

  • Je ne suis pas sûr si vous voulez réellement des constantes privées. Les macros auraient plus de sens.

Quoi qu'il en soit, voici le code (qui compile). Ce n'est pas testé, donc c'est un exercice pour vous.

#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

Notez que 'setTemperature' ne retourne rien - ce sera un problème – erip

+0

Merci beaucoup ... j'apprécie vraiment que vous preniez le temps aider! –

1

La ligne

if (temperatureCalculator, setTemperature (InputReading, temperatureformat)) 

semble suspect pour moi. Pourquoi existe-t-il une virgule entre temperatureCalculator et setTemperature? Vouliez-vous dire avoir un 'point' (.) pour appeler à la place la méthode de classe setTemperature sur votre instance de classe TemperaturetemperatureCalculator?

Si vous publiez l'erreur réelle, nous pouvons vous aider davantage. Bonne chance!

+0

Oui merci beaucoup c'était une erreur de ma part. J'ai remplacé la virgule avec un point là mais il n'a fait aucun changement aux messages d'erreur que je reçois du compilateur. :/ –

+0

Comme les autres mentionnés, vous devrez - mettre un point-virgule ';' à la fin de la définition de la classe (dans le code affiché ci-dessus, cela suit immédiatement l'accolade de fermeture '}' sur votre dernière ligne - couper et coller votre bloc 'main' pour qu'il soit en dehors de la définition de classe (mettre' main' sous la définition de la classe) - faire des définitions dans la classe pour 'getCelsius',' getFahrenheit', et 'getKelvin' - ils peut être vide pour l'instant, mais écrire un squelette pour chacun pour rendre le compilateur heureux –

1

Cette ligne, peut-être?

if (temperatureCalculator, setTemperature (InputReading, temperatureformat)) 

Je ne suis pas sûr de ce que vous essayez de faire avec cette virgule là. Vous voulez probablement mettre un point à la place. Vous devez également placer des points-virgules à la fin de votre classe (après la dernière parenthèse bouclée). Et enfin, vous devriez mettre votre méthode principale à la fin du fichier, en dehors de la classe.

0

Vous avez eu beaucoup de problèmes avec votre code:

  1. constantes de conversion de changement à static (pas vraiment un problème, mais met en garde avec 03 C++)
  2. Initialiser les variables locales dans le constructeur, et non dans la définition de classe. (avertit en C++ 03)
  3. Définir des accesseurs pour les variables locales.
  4. Renvoie la valeur setTemperature().
  5. Déplacer la définition de main() en dehors de la classe.
  6. Ajoutez un point-virgule après la définition de classe.
  7. Remplacez int main() par int main(void).
  8. Utilisez char temperatureformat = 0 au lieu de char temperatureformat = NULL.
  9. Remplacez , setTemperature par .setTemperature.
  10. Ajouter des parenthèses après les noms de fonctions (obligatoire). Ajouter une valeur de retour pour main().

Tous sont des commentaires préfixés par 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

Ajouter quelques définitions de fonctions à votre classe en plus avec ; à la fin de la classe:

Classe d'erreur (actif) « Température "n'a pas de membre" getCelsius "69

double getCelsius() 
    { 
     return Celsius; 
    } 

Classe d'erreur (active) "température" n'a pas d'élément "getFahrenheit" 70

double getFahrenheit() 
{ 
    return Fahrenheit; 
} 

Classe d'erreur (active) "température" n'a pas d'élément "getKelvin" 71

double getKelvin() 
{ 
    return Kelvin; 
}