Home > Back-end >  C errors that I do not understand (Unrecognized external symbols)
C errors that I do not understand (Unrecognized external symbols)

Time:04-23

I was just trying to re-program my python program into C that I recently started learning. It takes in a 4 digit sequence, separates it into 2 2-digit numbers and then calculates pythagorian theorem. This is the original code in python (working):

import math
backup = 0
a = 0
b = 0
odvesnaodvesna = 0
odvesnaprepona = 0
preponaodvesna = 0
start = 1
run = 1

def program():
    print("Sekvenční kalkulačka pythagorovy věty \n NÁVOD K POUŽITÍ \n 1. Zapište dvě strany do sekvence (např. a = 5cm, b = 10 cm, pak sekvence bude: 0510) \n 2. Program vygeneruje zbývající stranu ve všech možnostech, tj. \n ODVĚSNA-ODVĚSNA: \n PŘEPONA-ODVĚSNA: \n ODVĚSNA-PŘEPONA:")
    sekvence = int(input("Zadejte sekvenci: "))

    backup = sekvence
    a = int(sekvence / 100)
    b = backup - ((int(sekvence / 100)) * 100)

    if a > b:
        odvesnaodvesna = math.sqrt((a * a)   (b * b))
        preponaodvesna = math.sqrt((a * a) - (b * b))
        print("ODVĚSNA-ODVĚSNA: ", odvesnaodvesna)
        print("PŘEPONA-ODVĚSNA: ", preponaodvesna)
    elif b > a:
        odvesnaodvesna = math.sqrt((a * a)   (b * b))
        odvesnaprepona = math.sqrt((b * b) - (a * a))
        print("ODVĚSNA-ODVĚSNA: ", odvesnaodvesna)
        print("ODVĚSNA-PŘEPONA: ", odvesnaprepona)

while start == 1:
    if run == 0:
       quit() 
    else:
        program()
        run = int(input("Zadejte 0 pro ukončení nebo 1 pro zopakování: "))

And I rewrote it like this in C :


#include <iostream>
using namespace std;

int main() {
    double backup;
    double a;
    double b;
    double odvesnaodvesna;
    double odvesnaprepona;
    double preponaodvesna;
    int start = 1;
    int run = 1;

    void program(); {
        cout << "Sekvenční kalkulačka pythagorovy věty \n NÁVOD K POUŽITÍ \n 1. Zapište dvě strany do sekvence (např. a = 5cm, b = 10 cm, pak sekvence bude: 0510) \n 2. Program vygeneruje zbývající stranu ve všech možnostech, tj. \n ODVĚSNA-ODVĚSNA: \n PŘEPONA-ODVĚSNA: \n ODVĚSNA-PŘEPONA:";
        double sekvence;
        cout << "Zadejte sekvenci: ";
        cin >> sekvence;
        
        backup = sekvence;
        a = trunc(sekvence / 100);
        b = backup - (trunc(sekvence / 100)) * 100;

        if (a > b) {
            odvesnaodvesna = sqrt((a * a)   (b * b));
            preponaodvesna = sqrt((a * a) - (b * b));
            cout << "ODVĚSNA-ODVĚSNA";
            cout << odvesnaodvesna;
            cout << "\n";
            cout << "PŘEPONA-ODVĚSNA";
            cout << preponaodvesna;
        }
        else if (a < b) {
            odvesnaodvesna = sqrt((a * a)   (b * b));
            preponaodvesna = sqrt((b * b)   (a * a));
            cout << "ODVĚSNA-ODVĚSNA";
            cout << odvesnaodvesna;
            cout << "\n";
            cout << "ODVĚSNA-PŘEPONA";
            cout << preponaodvesna;
        }
    }
    
    while (start == 1) {
        if (run == 0) {
            return 0;
        }
        else {
            program();
            cout << "Zadejte 0 pro ukončení nebo 1 pro zopakování: ";
            cin >> run;
        }
    }
}

Now I am getting these errors from Visual studio: Errors

I am using a czech version of VS so a google translation is this:

193 / 5 000 Výsledky překladu

  1. Number of unrecognized external types: 1
  2. odvesnaprepon: unreferenced local variable
  3. Unrecognized external symbol "void_cdecl program (void)" (? Program @@ YAXXZ) referenced in function_main

From these messages I have no idea what I did wrong, so can anyone tell me?

CodePudding user response:

There is an extra semicolon after void program() ; So the compiler believes that this statement is a declaration, and the brace after it begins a code block.

This misdefined function is used later, so the compiler have to find it in another object file.

CodePudding user response:

I just got it. Functions are not declared inside int main, but separately. Just a beginner's fault I guess.

Stack overflow does not allow me to tag this as a solution, but take it as such.

  • Related