1

最近プログラミングを再開しました。私は初心者です。しばらく前に 1 つのクラスを受講しましたが、Dev C++ を使用してクラスで正常に動作するフラッシュ上のプログラムをコンパイルして実行しようとしています。現在、自宅で Code::Blocks の最新バージョンを使用しています。

簡単な電卓プログラムのプログラム コードは次のとおりです。

/* This program adds, subtracts, multiplies, and divides two integers. */

#include <stdio.h>
#include <stdlib.h>

// Function Declarations
int getOption(void);
void getData (int* a, int* b);
float calc   (int option, int num1, int num2);

float add  (float num1, float num2);
float sub  (float num1, float num2);
float mul  (float num1, float num2);
divn (float num1, float num2);

void printResult (float num1, float num2, float result, int option);

int main (void)
{
// Local Declarations
int done = 0;
int option;
int num1;
int num2;
int result;

// Statements
while (!done)
{
    option = getOption();
    if (option == 5)
    done = 1;
    else
    {
        do
            {
                printf("\n\nEnter two numbers: ");
                scanf("%f %f", &num1, &num2);
                if (option == 4 && num2 == 0)

                {
                    printf("\a\n *** Error *** ");
                    printf("Second Number cannot be 0\n");
                    } //if

                    } while (option == 4 && num2 == 0);

                    switch (option)
                    {
                        case 1: result = add  (num1, num2);
                        break;
                        case 2: result = sub  (num1, num2);
                        break;
                        case 3: result = mul  (num1, num2);
                        break;
                        case 4: result = divn (num1, num2);
                        } // switch

                printResult (num1, num2, result, option);
            } // else option != 5
        } // while

        printf("\nThank you for using Calculator.\n");
        return 0;
    } // main

/* ========================= getOption ===================================
    This function shows a menu and reads the user option.
        Pre     nothing
        Post    returns a valid option */

int getOption (void)
{
// Local Declarations
int option;

// Statements
do
{
    printf("\n******************");
    printf("\n*      Menu      *");
    printf("\n*                *");
    printf("\n*  1.  ADD       *");
    printf("\n*  2.  SUBTRACT  *");
    printf("\n*  3.  MULTIPLY  *");
    printf("\n*  4.  DIVIDE    *");
    printf("\n*  5.  QUIT      *");
    printf("\n*                *");
    printf("\n******************");

    printf("\n\n\nPlease type your choice ");
    printf("and press the return key : ");
    scanf("%d", &option);

    if (option < 1 || option > 5);
    printf("Invalid option. Please re-enter.\n");

 } while (option < 1 || option > 5);
    return option;
} // getoption

コンパイルしようとすると、次のビルド エラーが発生します。

C:\Users\Christopher\SkyDrive\School\Programming\Practice Stuff\complete calculator.o:complete calculator.c|| undefined reference to `add'|
C:\Users\Christopher\SkyDrive\School\Programming\Practice Stuff\complete calculator.o:complete calculator.c|| undefined reference to `sub'|
C:\Users\Christopher\SkyDrive\School\Programming\Practice Stuff\complete calculator.o:complete calculator.c|| undefined reference to `mul'|
C:\Users\Christopher\SkyDrive\School\Programming\Practice Stuff\complete calculator.o:complete calculator.c|| undefined reference to `divn'|
C:\Users\Christopher\SkyDrive\School\Programming\Practice Stuff\complete calculator.o:complete calculator.c|| undefined reference to `printResult'|
||=== Build finished: 5 errors, 0 warnings (0 minutes, 0 seconds) ===|

エラーはコードエラーによるものではないと思いますが (以前はコードが機能していたことを知っています)、現在 Dev C++ の代わりに Code::Blocks を使用しているため、別のライブラリを参照する必要がありますが、必要なライブラリがわかりません。

そして、助けていただければ幸いです。

4

1 に答える 1

0

add、sub、mul、divn、printResult が宣言されているが定義されていないことがはっきりとわかります。したがって、それらを使用するには、それらを定義する必要があります。また、あなたのコードは不正確です:

  1. 入力として2 つのintを受け取りますが、 floatですべての操作を実行します ...
  2. 第二に、上記のように、関数をどこにも定義せずに使用します。
  3. 最後に、宣言された関数 ( getOption、getData & calc ) の一部が定義されていますが、算術関数と printResult についても同じことを行ってはいけません。

したがって、ライブラリが見つからないためではなく、関数が宣言されているが定義されていないためです。または、そのような場合は、定義を含む別のファイルをリンクする必要がある場合があります。

-ダニー

于 2013-09-05T17:37:10.210 に答える