❶ c语言无法解析的外部指令
int main()
主函数没有定义,这是不应该犯的错误
❷ c++无法解析的外部命令
函数就是 void main() 写错了,是void main()不是void mian(),如果不是主函数就是没有添加相应的头文件。
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用。
这句话的意思是void mian()函数在某个类中,没有添加累的头文件。
注意事项
1、在调用外部库的时候,出现这种问题,可能就是库调用的方式不对,在QT中调用的时候,可以在.pro文件中加入库,或者可以在头文件中使用
#pragma comment(lib, “HITP450.lib”);
2、排除了这种问题,接下来就有可能调用了没有进行声明的函数,检查一下是否在头文件中进行定义。
3、配置属性-常规-mfc的使用,选择为使用标准Windows库,或者选择在静态库中使用mfc,并且在程序中添加 #pragma comment (lib,"Advapi32.lib") 或者在项目-属性-链接器-输入-附加依赖项 中添加相应的库名字,但是该库的文件路径最好跟当前项目的路径是一样的,否则需要在项目-属性-vc++目录-库目录 里面加上该库的目录,否则找不到该库
4、重要一定要确定好,lib的位数和编译器的位数选择是一致的。
❸ C语言出现无法解析的外部命令情况是怎么回事,我把结构数据的声明和定义都放在头文件中:
这个extern是声明而非定义,它表示first在别的某处,肯定是你在别的地方没有定义。
你可以在和该头文件对应的cpp文件中定义这三个变量。
直接在头文件定义(即去掉extern)是不好的做法,如果多个cpp一起编译,它们引用了不止一次这个头文件,会出现重复定义的错误。
最佳的做法是,一处定义,多处声明。
❹ C程序编译时提示无法解析的外部命令
int contiune_function(void)
{
printf("
Do you wish to continue? (0=NO/1=YES: ");
scanf("%d", &x);
这里名字写错了,应该是:continue_function
intcontinue_function()
{
printf(" Doyouwishtocontinue?(0=NO/1=YES:");
scanf("%d",&x);
while(x<0||x>1)
{
printf(" %disinvalid!",x);
printf(":");
scanf("%d",&x);
}
if(x==0)
return(NO);
else
return(YES);
}
❺ C语言中显示无法解析的外部命令
这是因为c和c++混编带来的问题。
1,问题根源:c++是支持类和名字空间,函数重载等高级技巧的。以函数重载为例:
int Add(int a, int b)
int Add(int a, int b, int c)
这意味着不同的函数有同样的名字(你写的,都叫Add),但是同样的名字会带来混淆,所以使用了一种叫“名字毁坏”的技术,不同的编译器有不同的毁坏规则,只要能实现区分就好。
所以,经过c++编译器的处理,你的Add名字已经面目全非,比如我这里叫:
错误 LNK2019 无法解析的外部符号 "int __fastcall Add(int,int)" (?Add@@YIHHH@Z),函数 _main 中引用了该符号。
到这,都没什么,只不过名字变了一下,只要编译器能处理正确就好。
但是,重点来了,你放了一个c文件进去,c语言,是不支持这些高级玩意儿的,名字也不会毁坏,这样,一个毁坏一个还是原名,得,两下对不上了。
2,解决办法
解决办法也是模式化的,当你声明的变量或者函数在c文件实现的时候,在h文件里声明的时候,用这样的结构包含起来,无论有多少个函数,都可以放在一起。
#ifdef __cplusplus
extern "C" {
#endif
int Add(int, int);
//其他声明
#ifdef __cplusplus
}
#endif
再编译就不会出现Link错误了。
头文件全文如下:
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int Add(int, int);
#ifdef __cplusplus
}
#endif