2017-10-19 2 views
0

mein Intro Informatik Klasse gerade in dieser Woche bedeckt Funktionen und nach für „Ungelöste externe Symbole“ den Hauptfaden Überprüfung Ich denke, es entweder3 Ungelöste externe Symbole (Anfänger C++)

a) erklärt die Funktionen aber nie rief sie nach der Haupt

b) Sie sind die richtige Bibliothek

ich bin nur nicht sicher fehlt, welches es ist oder wie es richtig, darüber zu gehen. Außerdem glaube ich, meine Logik im calcSideC Block obwohl Im etwas fehlerhaft ist nicht sicher,

#include <iostream> 
#include <cmath> 

using namespace std; 

float getSide(); 
float calcSideC(float sideA, float sideB, float total); 
void displaySideC(float sideC); 

int main() 
{ 
    { 
     float sideA = 0.0; 
     float sideB = 0.0; 
     float total = sideA + sideB; 
     float sideC = sqrt(total); 
     sideA = getSide(); 
     sideB = getSide(); 
     sideC = calcSideC(sideA, sideB, total); 
     displaySideC(sideC); 

     return 0; 
    } 

    float getSide(); 
    { 
     float sideA; 
     cout << "Enter two sides of a right triangle.\n\n" << "Side A: \n" << "Please enter the dimension: "; 

     cin >> sideA; 

     return sideA; 
    } 
    float getSide(); 
    { 
     float sideB; 
     cout << "\n\n" << "Side B: \n" << "Please enter the dimension: "; 
     cin >> sideB; 

     return sideB; 
    } 
    float calcSideC(float sideA, float sideB, float total); 
    { 
     float sideA; 
     float sideB; 
     float total; 
     float sideC; 
     pow(sideA, 2); 
     pow(sideB, 2); 
     float sqrt(total); 
     return sideC; 
    } 
    void displaySideC(float sideC); 
    { 
     float sideC; 
     cout << "The dimension of Side C is: " << sideC; 
    } 
    system("pause"); 
    return 0; 
} 
+0

Sie nie * definiert * Ihre Funktionen, wie 'getSide 'und andere. Daher der Linkerfehler. – AnT

Antwort

2

Sie können keine Funktionen definieren innerhalb von andere Funktionen (nicht, dass Sie es trotzdem richtig machen, da Sie extra ; haben, die bewirken, dass sich der Code anders verhält, als Sie erwarten).

Sie müssen die Funktionsdefinitionen aus main() verschieben.

nun mit, dass Syntaxfehler festgelegt, haben Sie immer noch einige logische Fehler im Code, einschließlich:

  • erklärt Funktion lokale Variablen, die die gleichen Namen wie Funktion

  • Parameter ignoriert die Rückgabewerte von std::pow() ein std::sqrt()

  • Berechnung total vor sideA und sideB wurden vom Benutzer Werte zugewiesen.

etwas mehr wie das Versuchen Sie stattdessen:

#include <iostream> 
#include <cmath> 

using namespace std; 

float getSideA() 
{ 
    float sideA; 
    cout << "\n\n" << "Side A: \n" << "Please enter the dimension: ";  
    cin >> sideA; 
    return sideA; 
} 

float getSideB() 
{ 
    float sideB; 
    cout << "\n\n" << "Side B: \n" << "Please enter the dimension: "; 
    cin >> sideB; 
    return sideB; 
} 

float calcSideC(float sideA, float sideB) 
{ 
    return sqrt(pow(sideA, 2) + pow(sideB, 2)); 
} 

void displaySideC(float sideC) 
{ 
    cout << "The dimension of Side C is: " << sideC; 
} 

int main() 
{ 
    cout << "Enter two sides of a right triangle."; 
    float sideA = getSideA(); 
    float sideB = getSideB(); 

    float sideC = calcSideC(sideA, sideB); 
    displaySideC(sideC); 

    system("pause"); 
    return 0; 
} 

Oder, wenn Sie die Funktionen voraus erklären wollen:

#include <iostream> 
#include <cmath> 

using namespace std; 

float getSideA(); 
float getSideB(); 
float calcSideC(float sideA, float sideB); 
void displaySideC(float sideC); 

int main() 
{ 
    cout << "Enter two sides of a right triangle."; 
    float sideA = getSideA(); 
    float sideB = getSideB(); 

    float sideC = calcSideC(sideA, sideB); 
    displaySideC(sideC); 

    system("pause"); 
    return 0; 
} 

float getSideA() 
{ 
    float sideA; 
    cout << "\n\n" << "Side A: \n" << "Please enter the dimension: ";  
    cin >> sideA; 
    return sideA; 
} 

float getSideB() 
{ 
    float sideB; 
    cout << "\n\n" << "Side B: \n" << "Please enter the dimension: "; 
    cin >> sideB; 
    return sideB; 
} 

float calcSideC(float sideA, float sideB) 
{ 
    return sqrt(pow(sideA, 2) + pow(sideB, 2)); 
} 

void displaySideC(float sideC) 
{ 
    cout << "The dimension of Side C is: " << sideC; 
} 
+0

Ich kann euch nicht genug danken! Ihr seid beide große Hilfen, ich würde euch beide aufrüsten, wenn ich könnte, aber ich bin es zu neu, diese Antworten definitiv als Lernwerkzeuge für Funktionen zu verwenden. –

1

Sie erklärt Ihre Funktionen innerhalb des Haupt! Das ist falsch. Verschiebe sie nach draußen. Als nächste Funktion hat keine Semikolons auf der deklarativen Linie ..

IE: void func(); {} falsch ist, weil es void func() {} ohne Semikolon sein sollte.

  • Sie haben eine Funktion getSide() ZWEIMAL ..
  • Sie aus dem Haupt zurück, bevor system("pause");
  • calcSideC verfügt über lokale Variablen, die als die Parameter gleich sind (Neudeklaration Fehler).
  • displaySideC hat eine lokale Variable, die mit den Parametern übereinstimmt (Fehler bei der Deklaration).
  • calcSideC verwendet nicht das Ergebnis sqrt(total);.
  • calcSizeC nicht wirklich Sidec mit Satz des Pythagoras berechnen, weil Sie noch nicht einmal pow Ergebnis verwenden ..

Korrekter Code wäre:

#include <iostream> 
#include <cmath> 

using namespace std; 

float getSideA(); 
float getSideB(); 
float calcSideC(float sideA, float sideB); 
void displaySideC(float sideC); 

int main() 
{ 
    float sideA = 0.0; 
    float sideB = 0.0; 
    float sideC = 0.0; 

    sideA = getSideA(); 
    sideB = getSideB(); 
    sideC = calcSideC(sideA, sideB); 
    displaySideC(sideC); 

    system("pause"); 
    return 0; 
} 


float getSideA() 
{ 
    float sideA; 
    cout << "Enter two sides of a right triangle.\n\n" << "Side A: \n" << "Please enter the dimension: "; 

    cin >> sideA; 

    return sideA; 
} 

float getSideB() 
{ 
    float sideB; 
    cout << "\n\n" << "Side B: \n" << "Please enter the dimension: "; 
    cin >> sideB; 

    return sideB; 
} 

float calcSideC(float sideA, float sideB) 
{ 
    float total = pow(sideA, 2); 
    total = total + pow(sideB, 2); 
    return sqrt(total); 
} 

void displaySideC(float sideC) 
{ 
    cout << "The dimension of Side C is: " << sideC; 
} 
+0

Es ist nicht notwendig, 'sideA',' sideB' und 'sideC' mit Nullen zu initialisieren, da diese unmittelbar danach überschrieben werden –

+0

@RemyLebeau; Sie haben 100% Recht, aber ich wollte OPs Code nicht ändern. Wie die Deklarationen der Funktionen vor main und so weiter. Ein anderer ist "total = total + blah". Ich war mir nicht sicher, ob sie von '+ =' und so weiter wussten. Aus diesem Grund habe ich versucht, ihren Code genau gleich zu halten, aber nur Fehler zu beheben und zu kompilieren, denke ich. Persönlich würde ich auch "namespace std" loswerden, weil es mich nervt .. :( – Brandon

Verwandte Themen