出现fatal error LNK1120: 1 unresolved externals

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出现fatal error LNK1120: 1 unresolved externals相关的知识,希望对你有一定的参考价值。

我自学可视化编程时复制的书上的代码,然后运行时出错:

#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明
//------------ 以下初始化窗口类----------------
int WINAPI WinMain(HINSTANCEhInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,intnCmdShow)

HWND hwnd ;
MSG Msg ;
WNDCLASS wndclass ;
char lpszClassName[] = "df";//窗口类名
char lpszTitle[]= "My_Windows";//窗口标题名
//窗口类的定义
wndclass.style = 0;//窗口类型为缺省类型
wndclass.lpfnWndProc = WndProc ;//窗口处理函数为WndProc
wndclass.cbClsExtra= 0 ;//窗口类无扩展
wndclass.cbWndExtra= 0 ;//窗口实例无扩展
wndclass.hInstance = hInstance ;//当前实例句柄
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
//窗口的最小化图标为缺省图标
wndclass.hCursor = LoadCursor( NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName = NULL ;//窗口中无菜单
wndclass.lpszClassName = lpszClassName; //窗口类名为"窗口示例"
//--------------- 以下进行窗口类的注册 -----------------
if( !RegisterClass( &wndclass))//如果注册失败则发出警告声音

MessageBeep(0) ;
return FALSE ;

//创建窗口
hwnd=CreateWindow(
lpszClassName,//窗口类名
lpszTitle,//窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口左上角坐标为缺省值
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的高和宽为缺省值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口的应用程序的当前句柄
NULL) ;//不使用该值
ShowWindow( hwnd, nCmdShow); //显示窗口
UpdateWindow(hwnd); //绘制用户区
while( GetMessage(&Msg, NULL, 0, 0))//消息循环

TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;

return Msg.wParam;//消息循环结束即程序终止时将信息返回系统

//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

switch(message)

case WM_DESTROY:
PostQuitMessage(0);//调用PostQuitMessage发出WM_QUIT消息
default://缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);

return (0);


1>------ Build started: Project: Win32Project1, Configuration: Debug Win32 ------
1> Source.cpp
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>F:\my work\交大\JI\self-learned programming\Win32Project1\Debug\Win32Project1.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

顺带说明,我用的是VS2012,教材是按照2005编的,我怀疑是不是版本的问题?但我就想用2012额。。。

unresolvedexternals未解决的外部错误是由未声明的函数引起的,可以通过在调用位置之前声明该函数来消除该错误。

正确的程序如下:

Intjh(intaintb。br处理);//函数声明,消除了未解析的外部错误

Intmain()

Inta=4,b=8,c;

C=jh(a,b);因为在调用之前没有声明函数jh,所以报告了一个错误

Printf(“%d,%d,%d”,a,b,c);

Intjh(inta,intb)//函数定义必须在调用后声明

一个稳定的;

C=;

A=b;

B=c。

Returnc;

扩展资料:

在编写时,函数声明可以复制函数头并在末尾添加分号。而且只能在参数表中写入每个参数的类型名,而不能写入参数名。

正如您可以在头文件中声明变量并在源文件中定义变量一样,您也可以在头文件中声明函数并在源文件中定义函数。

对于大多数新手来说,将函数声明直接放在使用该函数的每个源文件中是一种常见且首选的方法,并且是合法的。但这种方法已经过时,而且容易出错。

解决方案是将函数声明放在头文件中,以确保指定函数的所有声明是一致的。如果函数接口发生变化,只需要修改它的唯一声明。

参考技术A 你建工程的时候点错选项了。
这个工程应该选Win32 Application,而你选的是Win32 Console Application。后面的入口函数是main函数,所以才说未解析的外部符号main。
最简单的办法,重新建个Win32 Application的工程,注意不要选错选项,把这段代码拷贝进去就行了。另外也可以改设置,不过我没用过VS2012,也不知道它的设置是什么样的,所以你就用上面那种方法吧。本回答被提问者和网友采纳
参考技术B 工程建错了吧。重建个。。用win32。

vs2010旗舰版 程序运行出现 LINK : fatal error LNK1104: 无法打开文件“MSVCRTD.lib”

LINK : fatal error LNK1104: 无法打开文件“MSVCRTD.lib”

VS2010的程序应该需要连接MSVCRTD.lib,你在全文搜索看下是否有
#pragma comment(lib, "MSVCRTD.lib")
或者在属性页的链接的引入库里面是否有MSVCRTD.lib,有的话删除掉。
参考技术A MSVCRTD.lib 文件被多次引用了吧

以上是关于出现fatal error LNK1120: 1 unresolved externals的主要内容,如果未能解决你的问题,请参考以下文章

radial.o:错误 LNK2001:无法解析的外部符号 lambda_fatal 错误 LNK1120:8 个无法解析的外部,error.failed 退出状态为 1120

visual c++ 6.0 报错: Debug/第一次的.exe : fatal error LNK1120: 7 unresolved externals 急救!!!!

vs2010旗舰版 程序运行出现 LINK : fatal error LNK1104: 无法打开文件“MSVCRTD.lib”

错误 1 error LNK2001: 无法解析的外部符号 _mainCRTStartup 错误 2 error LNK1120: 1 个无法解析的外部命

VS08 总是出现 fatal error LNK1104: 无法打开文件“kernel32.lib”

C++ VS中出现1>LINK : fatal error LNK1104: 无法打开文件“msvcprtd.lib”错误,啥原因啊?求帮助。