| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 435 人关注过本帖
标题:为什么函数通不过编译呢。
只看楼主 加入收藏
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
为什么函数通不过编译呢。
在一个函数中调用另一个函数。但是总是通不过编译。说被调用的函数没有定义。实在不明白。。。。纠结
我把代码全贴出来吧
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 256
typedef struct
{
    char ch[MAX];
    int length;
}SeqString;




int main()
{
    void createTextFile();
    void StrCount();
    void StrInd();
    int patrPosition(SeqString s1,SeqString s2,int k);
   
    int xz;
   
    do
    {
        printf("*************************************\n");
        printf("*文本文件的检索、子串的统计以及定位 *\n");
        printf("*************************************\n");
        printf("*        1.建立文本文件             *\n");
        printf("*        2.单词子串的计数           *\n");
        printf("*        3.单词子串的定位           *\n");
        printf("*        0.退出整个系统             *\n");
        printf("*************************************\n");
        printf("           请选择:1 2 3 0 ");
        scanf("%d",&xz);
        switch(xz)
        {
            case 1:createTextFile();     break;
            case 2:StrCount();    break;
            case 3:StrInd();    break;
            case 0:return;
            default:printf("选择错误!请重新选择:\n");
        }
    }while(1);
}

int patrPosition(SeqString s1,SeqString s2,int k)
{
    int i,j;
    i = k - 1;
    j = 0;
    while (i < s1.length && j < s2.length)
    if(s1.ch[i] == s2.ch[j])
    {
        i ++;
        j ++;
    }
    else
    {
        i = i - j + 1;
        j = 0;
    }
    if(j >= s2.length)
    return i + 1 - s2.length;
    else
    return -1;
}

void StrInd()
{
    FILE *fp;
    SeqString s,t;
    char fname[10];
    int i,j,k,l,m;
    int wz[20];    //匹配的多个位置
    printf("请输入文件名: ");
    scanf("%s",&fname);
    fp = fopen(fname,"r");
    printf("请输入要检索的单词: ");
    scanf("%s",&t.ch);
    t.length = strlen(t.ch);
    l = 0;
   
    while(!feof(fp))
    {
        fread(&s,sizeof(s),1,fp);
        if(feof(fp))
        break;
        l ++;
        k = 1;
        i = 0;
        while(k < s.length)
        {
            j = patrPosition(s,t,k);
            if(j < 0)
            break;
            else
            {
                i ++;
                wz[i] = j;
                k = j + t.length;
            }
        }
        if(i > 0)
        {
            printf("行号: %d, 次数: %d,位置分别为: ",l,i);
            for(m = 1;m < i + 1;m ++)
            printf("%5d",wz[m]);
            printf("\n");
        }
    }
}


void createTextFile()
{
    SeqString s;
    char fname[10];
    char yn;
    FILE *fp;
    printf("请输入要建立的文件名: ");
    scanf("%s",&fname);
    fp = fopen(fname,"w");         //以读写的方式打开文件
    yn = 'n';                      //输入结束标志初始值
   
    while(yn == 'n' || yn == 'N')
    {
        printf("请输入一行文本 : ");
        getchar();
        gets(s.ch);
        s.length = strlen(s.ch);
        fwrite(&s,sizeof(s),1,fp);   //写一行文本到文本文件中
        printf("输入结束了?Y or N: ");
        yn = getchar();
    }
    fclose(fp);                      //close the file
    printf("建立文件结束!\n\n");
}

void StrCount()
{
    FILE *fp;
    SeqString s,t;
    char fname[10];
    int i = 0;
    int j,k;
    printf("请输入文本文件名: " );
    scanf("%s",&fname);
    fp = fopen(fname,"r");      //open the file for reading
    printf("请输入要统计的单词: ");
    scanf("%s",t.ch);
    t.length = strlen(t.ch);
   
    while(!feof(fp))     //扫描文本文件
    {
        fread(&s,sizeof(s),1,fp);   //读入一行文本
        if(feof(fp))  break;
        k  = 1;       //初始化开始位置
       
        while(k < s.length)
        {
            j = partPosition(s,t,k);
            if(j < 0)
            break;
            else
            {
                i ++;
                k = j + t.length;
            }
        }
    }
    printf("\n单词 %s 在文本文件 %s 中共出现了 %d 次\n ",t.ch,fname,i);
}

[Error] C:\Documents and Settings\Administrator\My Documents\C-Free\Temp\未命名2.c:162: undefined reference to `partPosition'
[Error] collect2: ld returned 1 exit status

这是产生的错误。求助啊
搜索更多相关主题的帖子: 函数 
2011-06-08 22:30
pkwangxinjun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:170
注 册:2010-8-29
收藏
得分:10 
partPositio函数名字写错了  自习看看 不懂了  再找我
2011-06-08 22:48
pkwangxinjun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:170
注 册:2010-8-29
收藏
得分:5 
还有main返回值问题
2011-06-08 22:49
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:5 
无效的引用,很明显应该是在函数调用是没声明
void StrInd()函数里调用了partPosition函数没声明
为什么不把函数声明放在前面却放在主函数里面呢?
2011-06-08 22:56
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:0 
回复 2楼 pkwangxinjun
果然是写错了。。。。真是郁闷啊。。。。谢谢啦

。。。!!!)))000
2011-06-09 12:26
快速回复:为什么函数通不过编译呢。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018341 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved