我该怎么办? LNK2019: 无法解析的外部符号

这是programming language上面的范例

但编译出错

本人很菜,希望能说的具体点,谢谢:)

#include <stdio.h>
#include <stdlib.h>
#define MAXOP 100
#define NUMBER '0'

main()
{
int getop(char[]);
void push(double);
double pop(void);
int type;
double op2;
char s[MAXOP];
while ((type=getop(s))!=EOF){
switch (type){
case NUMBER:
push(atof(s));
break;
case '+':
push(pop()+pop());
break;
case '_':
push(pop()-op2);
break;
case '*':
push(pop()*pop());
break;
case'/':
op2=pop();
if (op2!=0.0)
push(pop()/op2);
else
printf("error:zero divisor\n");
break;
case'\n':
printf("\t%.8g\n",pop());
break;
default:
printf("error:ubknow command %s\n",s);
break;
}
}
return 0;
}

1>------ 已启动生成: 项目: test-c.c, 配置: Debug Win32 ------
1>正在编译...
1>test-c.c
1>正在链接...
1>test-c.obj : error LNK2019: 无法解析的外部符号 _pop,该符号在函数 _main 中被引用
1>test-c.obj : error LNK2019: 无法解析的外部符号 _push,该符号在函数 _main 中被引用
1>test-c.obj : error LNK2019: 无法解析的外部符号 _getop,该符号在函数 _main 中被引用

我应该如何修改?谢谢
int getop(char[]);
void push(double);
double pop(void); 是放在main外面的,但仍然编译无法通过。

------------

是的是的,那我应该怎么改呢?

你在主函数中定义了
int getop(char[]);
void push(double);
double pop(void);
这三个函数。但没有具体子函数可供调用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-24
int getop(char[]);
void push(double);
double pop(void);
这3个函数,没实现代码

你应该写出这3个函数代码,哪怕是空的,如下:
int getop(char[])
{
}
void push(double)
{
}
double pop(void)
{
}

空代码,编译能通过,但运行会出错。
书的例子,肯有有这3个代码的实现的

VS常见报错:error LNK2019:无法解析的外部符号
1. **头文件内声明的函数**:在头文件中声明了函数,但未在实现文件中定义函数。解决方法是在实现文件中定义函数,或者在调用函数处添加函数声明。2. **库文件内定义的函数**:可能未加载相应库或库版本与编译器版本不匹配。解决方法是生成对应版本的静态库,将库和头文件添加到项目中,配置编译器版...

error LNK2019: 无法解析的外部符号
如果在生成中包含的某个文件中没有定义 i 和 g,链接器将生成 LNK2019。可以添加这些定义,方法是将包含这些定义的源代码文件包括为编译的一部分。或者可以将包含这些定义的 .obj 或 .lib 文件传递给链接器。3. 对于从早期版本升级到当前版本的 C++ 项目,如果定义了 __UNICODE 并且入口点为 WinMain...

...LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmain...
解决办法:重新建一个工程,选C++控制台程序。

...error LNK2019: 无法解析的外部符号 _ENGOPEN,该符号在函数 _MAIN...
我的是这样的,subroutine里加了一个变量D2X,而call 时没有对应修改,所以出错,直接把call语句修改一下就ok了,改成:CALL CONSTRUCT_X(Mloc,Mloc1,Nloc,DX,U,DelxU,UxL,UxR,Kappa,D2X)

...lnk2019 无法解析的外部符号_MAIN_被函数_main引用
函数连接问题,你首先找一下程序段中有没有_main函数引用。然后再找_main函数,是在程序段中还是在其它什么位置,加以引用。

error LNK2019: 无法解析的外部符号
一种情况是:只要在项目-属性-连接器-系统-子系统中把控制台改为windows 另外是:使用的API函数没有包含在头文件中 加入#include<mmsystem.h> pragma comment(lib,"winmm.lib") 看是否好用

1、error LNK2019: 无法解析的外部符号"struct ***"
1. 确保所有声明的函数都有对应的实现。2. 检查函数声明与实现之间的函数名、参数列表以及返回值是否完全一致。3. 考虑是否存在自行修改函数名的情况,导致声明与实现不匹配。在修改代码后,确保重新编译,检查错误是否已消除。通过细心检查并遵循上述步骤,通常可以有效解决"error LNK2019"这类问题。总结...

error LNK2019: 无法解析的外部符号 "__declspec(dllimport) int...
这个问题是因为库没导入而引起的。在调用函数的文件中引入库就可以了。具体操作为:在#include下面添加代码:pragma comment(lib, "SkinPPWTL.lib")即可。

error LNK2019: 无法解析的外部符号 "int __stdcall mainplay(int,char...
只有声明是不够的,还需要你在源代码(.cpp)里去实现它,编译器编译这个cpp的时候会将你的实现代码输出到.obj里,连接器直接去obj里找。总的来说,【无法解析的外部符号】这样的错误是因为你只声明了函数原型(编译可通过),但却没有提供函数的实现代码(这会导致链接失败LNK2019)。

无法解析的外部符号
一般出现lnk2019错误都是库文件没添加造成的。项目--》属性--》配置属性--》链接器-》输入--》附加依赖项 在其中加入所需库文件,同时在“链接器--》常规--》附加库目录”中填入相应库名。这样应该就可以了。

相似回答
大家正在搜