2016-06-23 1 views
0

All- ich habe das ziemlich viel recherchiert. Mein Programm kompiliert ohne Fehler, aber die Werte aus den Funktionen innerhalb der Struktur werden nicht an das Programm übergeben. Kannst du mir helfen, herauszufinden, warum sie es nicht sind? Ich habe die Codeschnipsel eingefügt, die die fraglichen Komponenten zeigen. Hauptsächlich, mein Code wie: "& allData :: ConvertToC" gibt keinen Wert von der Funktion innerhalb der Struktur "allData" zurück. Es gibt nur den Wert 1 zurück, unabhängig von der Eingabe von "allData.temperature". Ich kenne alle Komponenten des Programms, andere als die genannten funktionieren.C++ - Funktionen innerhalb von Struct und Aufruf von Werten durch Referenz

Code-Schnipsel:

//defining the struct 

struct allData { 
    char selection; 
    double centigrade; 
    double fahrenheit; 
    double temperature; 
    double ConvertToC (const double& temperature); 
    double ConvertToF (const double& temperature); 
} allData; 

//adding data to the struct for the functions within the struct to use 

cout << "Enter C for converting your temperature to Celsius, or enter F for converting your temperature to Fahrenheit, and press ENTER." << endl << endl; 

cin >> allData.selection; 

cout << "Enter your starting temperature to two decimal places, and press ENTER." << endl << endl; 

cin >> allData.temperature; 

switch (allData.selection) { 

//my attempt to reference the functions within the struct and the data in the struct, but it is not working and always returns a value of 1. 

case 'c': { &allData::ConvertToC; 

    cout << "Your temperature converted to Celsius is: " << &allData::ConvertToC 
    << endl << endl; 
    break; 
    } 

case 'C': { &allData::ConvertToC; 

    cout << "Your temperature converted to Celsius is: " << &allData::ConvertToC  
    << endl << endl; 
    } 
} 


//Function definitions that are located in the struct. Do I define the functions in the normal way, like this, if they are located in the struct? 

double allData::ConvertToF (const double& temperature) { 

    double fahrenheit = 0; 
    fahrenheit = temperature * 9/5 + 32; 
    return fahrenheit; 

} 


double allData::ConvertToC (const double& temperature) { 

    double centigrade = 0; 
    centigrade = (temperature - 32) * 5 /9; 
    return centigrade; 

} 
+3

'& ALLDATA :: ConvertToC' ist die Adresse des Verfahrens Ihr nennen es nicht, müssen Sie' allData.ConvertToC (allData.temperature) 'tun. – Holt

+0

Das ist auch die richtige Antwort, glaube ich! Vielen Dank! – cppstudent1

Antwort

1

Sie sind nicht den Funktionsaufruf ausgeführt wird, sind Sie vorbei nur eine Funktion Zeiger auf den Stream Cout.

Ich denke, was Sie wirklich wollen, ist so etwas wie:

cout << "Your temperature converted to Celsius is: " << allData.ConvertToC(allData.temperature) << endl; 

Darüber hinaus müssen Sie nicht durch Bezugnahme in der „ConvertToC“ Methode zu übergeben, da Sie nicht wirklich sind etwas zu speichern (ein „Doppel "ist 8 Bytes breit und Referenzen/Zeiger sind 4 Bytes auf 32-Bit-Systemen oder 8 Bytes auf 64-Bit-Systemen).

+2

Hinweis: Es ist schlecht, 'endl' wiederholt so aufzurufen, weil es den Stream unnötig löscht. Sie sollten stattdessen einfach '\ n's zum Stream hinzufügen und sie am Ende leeren, wenn Sie es wirklich brauchen. – Andrew

+0

Tatsächlich ist es meine eigene Schuld für Kopieren und Einfügen, ohne den Rest der Zeile zu überprüfen! Ich werde jetzt bearbeiten. – Fallso

+0

Danke an alle- Ich werde \ n anstelle von endl verwenden. Ich habe jedoch die folgenden Änderungen vergeblich vorgenommen. Ich konvertierte '& allData :: ConvertToC' in 'allData :: ConvertToC (allData.temperature)'. Ich bekomme jetzt einen Compilerfehler: "Memberfunktion kann 'double allData :: ConvertToC (double)' ohne Objekt nicht aufgerufen werden Fall 'c': {allData :: ConvertToC (allData.temperature)" – cppstudent1

0
// Name of struct made distinct from its instance, for clarity. 
struct AllData { 
    char selection; 
    double centigrade; 
    double fahrenheit; 
    double temperature; 
    double ConvertToC(); 
    double ConvertToF(); 
} allData; 

... 

allData.selection = 'C'; 
allData.temperature = 74.5; 

switch (allData.selection) 
{ 
case 'c': 
case 'C': 
    cout << "Your temperature converted to Celsius is: " << allData.ConvertToC() << endl << endl; 
    break; 
} 

... 

double AllData::ConvertToF() 
{ 
    //double fahrenheit = 0; Why not store the result in the struct? 
    fahrenheit = temperature * 9/5 + 32; 
    return fahrenheit; 
} 

double AllData::ConvertToC() 
{ 
    //double centigrade = 0; 
    centigrade = (temperature - 32) * 5/9; 
    return centigrade; 
} 
+0

Das hat auch richtig funktioniert. Es gab Redundanz in meinen früheren Funktionsdefinitionen, auf die Sie auch hingewiesen haben. Vielen Dank! – cppstudent1

Verwandte Themen