簡體   English   中英

C中實際定義的函數的未定義參考錯誤

[英]Undefined reference error to function that is actually defined in C

我寫了這個程序來制作數字鑽石。 問題是當我編譯程序時,它會引發錯誤

build2.c :(。text + 0x5):對`get_input'的未定義引用

collect2:錯誤:ld返回1退出狀態

我已經嘗試了幾個小時才能弄清楚問題出在哪里(例如,如果有拼寫錯誤或類似的東西),但是函數調用看起來是相同的。 我試圖重命名它,既將其作為原型也作為實現來編寫,但似乎沒有任何效果。 有沒有我看不到的問題?

//Define prior to main

int is_valid(int);
int get_input(void);
void print_pattern(int);

//Main
int main(void){
        int diamond_size;
        //diamond_size = get_input();

//value from get imput method used for diamond size

        print_pattern(get_input());

        return 0;
}

void print_pattern(int size){
int length, num, i, j;

//beginning of new diamond

printf("\n");

//Define each integer to work in layout of diamond
//First for loop fans out

for(i=1; i  <= size; i += 2){
        length = size-i+1;
        num =  1;
        printf("%*s", length," ");
        for(j = 0; j < i; j++){
                printf("%d ", num);
                num++;
        }
        printf("\n");
}

//second for loop fans in

for(i=size-2; i >= 1; i -= 2){
        length = size-i+1;
        num =   1;
        printf("%*s", length," ");
          for(j = 0; j < i; j++){
                printf("%d ", num);
                num++;
        }
        printf("\n");
}




int is_valid(int value){
int rem;

//uses remainder to determine if it is odd or even; an even number will not have a reaminder in this case

rem = value % 2;

if (rem == 0){
printf("You've entered a even number. Please try again.\n");
return (0);
}

//greater than 9 cnd
if (value > 9){
printf("You have entered a number greater than 9. Please try again.\n");
return (0);
}

//less than 1 cnd

if (value < 1){
printf("You have entered a number less than 1. Please try again.\n");
return (0);
}

return (1);

}

int get_input()
{
int cont, number, valid;
cont = 1;
while (cont = 1)
{
        printf("Enter an odd number less than 9 and greater than 0 < ");
        scanf("%d", &number);
        valid = is_valid(number);
        if (valid == 1)
        {
        cont = 0;
        }

}
return number;
}
}

您似乎具有嵌套函數; 這是(a)一個非標准的GCC擴展 ,並且(b)我認為嵌套的get_input()函數的作用域是封裝函數,而不是文件作用域。 解決方案是將get_input()移到文件范圍。 print_pattern()的末尾添加一個額外的} ,並在文件末尾刪除最后一個}

另外,請格式化您的代碼-如今,大多數IDE都具有整理代碼的選項,並且如果使用正確的縮進,您可能更早就發現了問題。

哦,作為一項額外的錯誤修復,您還可以使用get_input()

while (cont = 1)

這將永遠是正確的-改為使用:

while (cont == 1)

函數print_pattern不會在適當的位置終止,而是在文件的結尾處終止:

void print_pattern(int size){
 ...
... end of the loop
}

... more functions
...
... end of print_pattern
}

結果導致定義了嵌套函數,而不是全局級別。

縮進塊通常是個好習慣,在這種情況下,您會很快意識到錯誤。

暫無
暫無

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

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