3 Нерешенные внешние символы (начинающий C++)

Мое вступительное занятие по информатике только что охватило функции на этой неделе, и после проверки основной темы на "Неразрешенные внешние символы" я думаю, что это либо

а) Вы объявили функции, но никогда не вызывали их после main

б) вам не хватает правильной библиотеки

Я просто не уверен, что это и как правильно это делать. Кроме того, я думаю, что моя логика немного ошибочна в блоке calcSideC, хотя я не уверен

#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;
}

2 ответа

Решение

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

Вы должны переместить определения функций из main(),

Теперь, с исправленной синтаксической ошибкой, в вашем коде по-прежнему довольно много логических ошибок, включая:

  • объявление локальных переменных функции, имена которых совпадают с именами параметров функции

  • игнорируя возвращаемые значения std::pow() std::sqrt()

  • расчета total до sideA а также sideB были назначены значения пользователем.

Попробуйте что-то более похожее на это:

#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;
}

Или, если вы хотите заранее объявить функции:

#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;
}

Вы объявили свои функции внутри main! Это не верно. Переместите их на улицу. Далее, функции НЕ имеют точки с запятой в декларативной строке.

IE: void func(); {} это неправильно, потому что это должно быть void func() {} без точки с запятой.

  • У вас есть функция getSide() ДВАЖДЫ..
  • Вы возвращаетесь с основного раньше system("pause");
  • calcSideC имеет локальные переменные, которые совпадают с параметрами (ошибка объявления).
  • displaySideC имеет локальную переменную, которая совпадает с параметрами (ошибка объявления).
  • calcSideC не использует результат sqrt(total);,
  • calcSizeC на самом деле не рассчитывает SideC с помощью теоремы Пифагора, потому что вы даже не используете pow результат..

Правильный код будет:

#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;
}
Другие вопросы по тегам