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