对于在C中实际定义的函数的未定义引用错误

时间:2017-02-21 03:52:30

标签: c function reference compiler-errors

我写了这个程序来建造一个钻石。问题是,当我编译程序时,它会抛出错误

  

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;
}
}

2 个答案:

答案 0 :(得分:2)

你似乎有嵌套函数;这是(a)a non-standard GCC extension,(b)我假设嵌套get_input()函数的范围是封闭函数,而不是文件范围。解决方案是将get_input()移动到文件范围。在print_pattern()结束时添加额外的},并删除文件末尾的最终}

另外,请格式化您的代码 - 这些天大多数IDE都有可以选择整理它们,并且通过正确的缩进,您可能更早地看到了问题。

哦,作为额外的错误修复,你也有get_input()

while (cont = 1)

这将永远是真的 - 改为使用它:

while (cont == 1)

答案 1 :(得分:1)

函数print_pattern没有在适当的位置终止,而是在文件的最末端:

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

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

这导致定义嵌套函数而不是全局级别。

将块缩进是一般的好习惯,在这种情况下你会很快意识到这个错误。