3 未解析的外部符号(初学者 C++)

3 Unresolved external symbols (beginner C++)

我的计算机科学入门 class 本周刚刚介绍了函数,在检查了 "Unresolved external symbols" 的主要线程后,我认为它是

a) 您声明了函数但从未在 main

之后调用它们

b) 您缺少正确的库

我只是不确定它是哪一个或如何正确地处理它。另外,我认为我的逻辑在 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;
}

您在 main 中声明了您的函数!这是错误的。把它们移到外面。 接下来,函数在声明行上没有分号..

IE:void func(); {} 是错误的,因为它应该是 void func() {},没有分号。

  • 你有一个函数getSide() TWICE..
  • 你 return 来自 main before 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;
}

您不能在其他函数内部定义函数(并不是说您做的是正确的,因为您有额外的 ; 导致代码的行为与您预期的不同)。

您需要将函数定义移出 main()

现在,在修复了该语法错误后,您的代码中仍然存在不少逻辑错误,包括:

  • 声明与函数参数同名的函数局部变量

  • 忽略 std::pow()std::sqrt()

  • 的 return 值
  • sideAsideB被用户赋值之前计算total

尝试更像这样的东西:

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