标题:编译器显示无法解析外部符号的问题
只看楼主
浅草没马蹄
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:20
专家分:18
注 册:2018-3-10
结帖率:40%
已结贴  问题点数:20 回复次数:10 
编译器显示无法解析外部符号的问题
这是要统计C语言关键字出现的次数,求大佬在不改变程序结构的前提下帮忙解释一下这个问题,

错误显示:有两个无法解析的外部符号

我无法找到错误出现在哪里,蛮尴尬的,请大佬解释一下错在哪里哈
源代码如下:
#include<stdio.h>
#include<ctype.h>
#include<string.h>

#define MAXWORD 100
#define NKEYS 11

//关键字结构体定义
struct key{
    char *word;
    int count;
}keytab[NKEYS]={
    "auto",0,
    "break",0,"case",0,
    "char",0,"const",0,
    "continue",0,"default",0,
    /*...*/
    "unsinged",0,"void",0,
    "volatile",0,"while",0
};


//输入函数
int getword(char *,int);

//折半查找函数
int binsearch(char *,struct key *,int);

//统计输入中C语言关键字出现次数
int main(){
    int n;
    char word[MAXWORD];

    while(getword(word,MAXWORD) !=EOF){
        if(isalpha(word[0]))
            if((n=binsearch(word,keytab,NKEYS))>=0)
                keytab[n].count++;
    }
    for(n=0;n<NKEYS;n++){
        if(keytab[n].count>0)
            printf("%4d %s \n",keytab[n].count,keytab[n].word);
    }
    return 0;
}


//binsearch函数,在tab[0]到tab[n-1]之间查找单词
int binsearch(char *word,struct key tab[],int n){
    int cond;
    int low,high,mid;

    low=0;
    high=n-1;
    while(low<=high){
        mid=(low+high)/2;
        if((cond=strcmp(word,tab[mid].word))<0)
            high=mid-1;
        else if(cond>0)
            low=mid+1;
        else
            return mid;
    }
    return -1;
}

//输入函数
int getword(char *word,int lim){
    int c,getch(void);
    void ungetch(int);
    char *w=word;
    while(isspace(c=getch()))
        ;
    if(c!=EOF)
        *w++=c;
    if(!isalpha(c)){
        *w='\0';
        return c;
    }
    for(;--lim>0;w++){
        if(!isalnum(*w=getch())){
            ungetch(*w);
            break;
        }
        *w='\0';
        return word[0];
    }
}
搜索更多相关主题的帖子: word char int return mid 
2019-03-13 21:04
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
我手头没有编译器,你把错误信息发出来

但是你声明函数部分 和实现部分如果一致 应该没有问题
两个无法解析的外部符号,猜测就是你那两个函数出问题了

DO IT YOURSELF !
2019-03-13 21:30
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:2 
要不然,你干脆就不声明函数 直接实现好了

DO IT YOURSELF !
2019-03-13 21:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
所以,为什么不肯贴出错误信息?例如
warning C4715: 'getword' : not all control paths return a value
error LNK2001: unresolved external symbol "void __cdecl ungetch(int)" (?ungetch@@YAXH@Z)
error LNK2001: unresolved external symbol "int __cdecl getch(void)" (?getch@@YAHXZ)





2019-03-14 08:40
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
我能说呵呵么?

大夫,给俺开点药呗。

你哪儿不舒服?

俺不告诉你。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-03-14 08:59
浅草没马蹄
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:20
专家分:18
注 册:2018-3-10
得分:0 
回复 4楼 rjsp

这个是运行后编译器给出的错误提示,表示不知道怎么改正。。。。。


1>------ 已启动生成: 项目: 结构体, 配置: Debug Win32 ------
1>生成启动时间为 2019/3/14 9:28:29。
1>InitializeBuildStatus:
1>  正在对“Debug\结构体.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1>  所有输出均为最新。
1>ManifestResourceCompile:
1>  所有输出均为最新。
1>结构体.obj : error LNK2019: 无法解析的外部符号 "void __cdecl ungetch(int)" (?ungetch@@YAXH@Z),该符号在函数 "int __cdecl getword(char *,int)" (?getword@@YAHPADH@Z) 中被引用
1>结构体.obj : error LNK2019: 无法解析的外部符号 "int __cdecl getch(void)" (?getch@@YAHXZ),该符号在函数 "int __cdecl getword(char *,int)" (?getword@@YAHPADH@Z) 中被引用
1>E:\VC program fies\C语言\瞎搞\结构体\Debug\结构体.exe : fatal error LNK1120: 2 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:03.68
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2019-03-14 09:30
浅草没马蹄
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:20
专家分:18
注 册:2018-3-10
得分:0 
这是编译器运行后给出的错误提示,不知道怎么改正,求大佬帮帮忙!


1>------ 已启动生成: 项目: 结构体, 配置: Debug Win32 ------
1>生成启动时间为 2019/3/14 9:28:29。
1>InitializeBuildStatus:
1>  正在对“Debug\结构体.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1>  所有输出均为最新。
1>ManifestResourceCompile:
1>  所有输出均为最新。
1>结构体.obj : error LNK2019: 无法解析的外部符号 "void __cdecl ungetch(int)" (?ungetch@@YAXH@Z),该符号在函数 "int __cdecl getword(char *,int)" (?getword@@YAHPADH@Z) 中被引用
1>结构体.obj : error LNK2019: 无法解析的外部符号 "int __cdecl getch(void)" (?getch@@YAHXZ),该符号在函数 "int __cdecl getword(char *,int)" (?getword@@YAHPADH@Z) 中被引用
1>E:\VC program fies\C语言\瞎搞\结构体\Debug\结构体.exe : fatal error LNK1120: 2 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:03.68
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2019-03-14 09:30
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:3 
在你的开发环境里把光标放在那个找不到的函数上敲一下F1看看帮助,看在你的版本里这个函数应该叫什么名字,需要包含什么头文件。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-03-14 14:27
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:5 
从提示上看是没有链接库的原因,说明你的编译器太老了。

或者你可以用getchar()代替

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2019-03-14 15:35
浅草没马蹄
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:20
专家分:18
注 册:2018-3-10
得分:0 
回复 8楼 forever74
我敲了f1后出现错误,好像是没下载相关内容。。。。。
2019-03-14 16:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493563-1-1.html




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

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