[英]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.