簡體   English   中英

為什么編譯器給我這個:對 function 的未定義引用?

[英]Why does the compiler is giving me this: undefined reference to function?

好的,我已經嘗試解決這個問題 3 個小時了,我搜索了一堆堆棧溢出問題和答案,但我遇到了同樣的錯誤:

/usr/bin/ld: /tmp/ccXbXNRV.o: in function 'main':
main.c:(.text+0x5a): undefined reference to 'plus'
/usr/bin/ld: main.c:(.text+0x67): undefined reference to `minus'
collect2: error: ld returned 1 exit status

我想不通,因為我的代碼似乎不是他的問題

主要.c:

#include <stdio.h>
#include "funcs.c"

int main()
{
    int z = 0;
    int wh = 1;
    while (wh == 1)
    {
        printf("What you want?\n1-Plus\n2-Minus\n");
        scanf("%d", &z);
        if (z == 1)
        {
            plus();
        }
        if (z == 2)
        {
            minus();
        }
    }
    printf("The program ended\n");

    return 0;
}

函數.c

#include <stdio.h>

inline void plus(void)
{
    int a = 0;
    int b = 0;
    printf("Pls insert a numb\n");
    scanf("%d", &a);
    printf("Pls insert a numb\n");
    scanf("%d", &b);
    a = a + b;
    printf("The result is: %d\n", a);
}

inline void minus(void)
{
    int a = 0;
    int b = 0;
    printf("Pls insert a numb\n");
    scanf("%d", &a);
    printf("Pls insert a numb\n");
    scanf("%d", &b);
    a = a - b;
    printf("The result is: %d\n", a);
}

幫助.h

extern int a;
extern int b;
extern int z;
extern int wh;
inline void minus(void);
inline void plus(void);

我嘗試用這個命令編譯它gcc funcs.c main.c我知道這是一個簡單的程序,但我真的很想學習 c

如果您能提供幫助,我將不勝感激!

你可以通過做三件事來解決這個問題:

  1. 不要包含 .c 文件。 您已經在命令行上將其提供給 gcc。
  2. 在使用這些函數的文件中包含 help.h。
  3. 不使用inline 當調用者和被調用者在不同的翻譯單元中時,您不能使用內聯。

主要.c:

#include <stdio.h>
// #include "funcs.c"
#include "help.h"

int main()
{
    int z = 0;
    int wh = 1;
    while (wh == 1)
    {
        printf("What you want?\n1-Plus\n2-Minus\n");
        scanf("%d", &z);
        if (z == 1)
        {
            plus();
        }
        if (z == 2)
        {
            minus();
        }
    }
    printf("The program ended\n");

    return 0;
}

函數.c

#include <stdio.h>

void plus(void)
{
    int a = 0;
    int b = 0;
    printf("Pls insert a numb\n");
    scanf("%d", &a);
    printf("Pls insert a numb\n");
    scanf("%d", &b);
    a = a + b;
    printf("The result is: %d\n", a);
}

void minus(void)
{
    int a = 0;
    int b = 0;
    printf("Pls insert a numb\n");
    scanf("%d", &a);
    printf("Pls insert a numb\n");
    scanf("%d", &b);
    a = a - b;
    printf("The result is: %d\n", a);
}

幫助.h:

extern int a;
extern int b;
extern int z;
extern int wh;
void minus(void);
void plus(void);

像這樣編譯運行:

$ gcc -Wall -Werror funcs.c main.c
$ ./a.out 
What you want?
1-Plus
2-Minus
^C

其他想法:

extern int a;
extern int b;
extern int z;
extern int wh;

您已經在本地聲明了這些變量。 這是不必要的。 extern 關鍵字告訴編譯器這些變量是在它看不到的另一個翻譯單元中定義的。 這不是真的,所以你應該刪除這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM