2017-09-16 84 views
1

我知道这个问题已经被问过很多次了,我已经尝试了所有已发布的解决方案,但对于我来说,它似乎不起作用。我不知道这是编译器问题还是我做错了。未定义的函数引用,ld返回1退出状态错误。没有语法错误。

我从我创建的'bin.txt'文件中提取数据。它包含0和1的3x3矩阵(仅在两位数之间没有任何空格)。我想统计出有多少个零和那个,并且据此,我想创建一个新的文本文件(在我的代码'encode.txt'中)并将这些计数的数字写入该文件。

我在CodeBlocks上使用GNU GCC编译器。这是我的代码,如果你发现错别字,那我真的很抱歉。我不打算浪费你的时间。任何帮助和提示,这是值得赞赏的。

#include <stdio.h> 
#include <stdlib.h> 
#define row 3 
#define col 3 

int foo(int x, int y); 

int main() 
{ 
    FILE *ptr; 
    FILE *encode; 
    int i,j,zero=0,one=0; 
    int a[row][col]; 
    ptr=fopen("bin.txt","r"); 
    encode = fopen("encode.txt","w"); 

for(i=0;i<3;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
     fscanf(ptr,"%1d",&a[i][j]); 
     if(a[i][j]==0) 
     { 
      zero++; 
     } 
     else 
     { 
      one++; 
     } 
    } 
    foo(zero, one); 
    zero=0; 
    one=0; 
} 

/*----------------Print scaned file----------------------------------*/ 
for(i=0;i<3;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
     printf("%1d",a[i][j]); 
    } 
    printf("\n"); 
} 
/*----------- Foo function ----------*/ 

int foo(int x, int y) 
{ 
    fprintf(encode,"%d %d",x,y); 
    fprintf(encode,"\n"); 
} 

/*----------- Closing file ----------*/ 
    fclose(ptr); 
    fclose(encode); 

    return 0; 
    } 

生成日志:

mingw32-g++.exe -o bin\Debug\file_compress.exe obj\Debug\main.o 
obj\Debug\main.o: In function `main': 
E:/Code/C/File compression/file_compress/main.c:31: undefined reference to 
`foo' 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 
+3

您不能在另一个函数内定义一个函数。将“foo”的定义移到'main' – Arkia

+0

之外啊,我不好意思,我没注意到。谢谢你的帮助 – Rajan

+0

C不是C++不是C!如果这是C代码,请使用C编译器,即gcc前端,而不是C++前端g ++!否则,更改标签。并阅读gcc手册页。 – Olaf

回答

1

嵌套函数没有在标准C允许的(虽然GCC提供extension)。无论如何,你可能并不打算使用嵌套函数。将foo()函数的定义移到main()函数之外。

相关问题