常见错误1:

Error 2
error LNK1120: 1 unresolved externals

Error 1
error LNK2019: unresolved external symbol __imp__PathFileExistsA@4 referenced in function "public: void __thiscall myspace::RCSetupWithVirtual::StartupSetup(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?

StartupSetup@RCSetupWithVirtual@myspace@@QAEXV?$basic_string@DU?

$char_traits@D@std@@V?

$allocator@D@2@@std@@@Z)

首先我们注意。这是一个链接错误,链接过程中找不到东西了。

出现这个错误事实上就是这种,找不到这个函数的定义,眼下我遇到的情况有下面几种:

1> 这个错误提示的函数一个系统的API。PathFileExists,对于系统的API都是在电脑上有的,无非是lib和dll载入。对于刚開始学习的人,可能对lib文件,dll文件比較陌生。事实上非常easy,为什么我们写个头文件包括比方#include<iostream> 就能够使用里面的cout和cin函数了呢?事实上就是由于我们的电脑有这些函数的实现代码,仅仅只是它们的头文件我们能够看到,源文件被编译成lib文件(静态链接)或者dll(动态链接)。我们当然就看不到里面的内容了(都是二进制的)。

解决问题的方法非常easy。首先去MSDN上搜下你用到的这个API。比方就是PathFileExists这个,里面有使用这个API的具体信息:

须要包括的头文件。lib文件。我们须要做的就是把这个lib文件包括进去。

project属性---Linker---Input---Additional Dependencies 点击下拉button选择Edit。然后直接放进去就好。

  继续编译试下,就OK了.

2> 假设这个函数是自己编写的或者是自己的project中的某个函数,这时候就应该意识到,没有找到这个函数。假设是两个不同的project,是不能直接#include进来的,当跨project写代码的时候,这个问题会碰到。

自己不知不觉调用了一个其它project的函数。编译的时候没有错误。可是链接的时候就找不到了。解决的办法是在同一个project里面写代码。假设非要跨project,那就像调用系统函数一样,lib和dll两种方式了。

3>另一个情况,头文件包括了。也是同一个project,但还是找不到,提示链接错误。这个时候还有种情况就是,你有没有加入对应文件到project里。有时候我们不是从project里创建文件,而是在外部复制了一个文件,直接打开。进行一下改写。我们在开发时。大部分都是參考别人之前的代码,复用嘛!所以这样的方式非经常常使用。

但这就有个问题。你忘记把对应的文件加入到对应的project了,就是这样:

假设没有导入进来。是会有链接错误的。

常见错误2:

Error 2
error LNK1120: 1 unresolved externals

Error 1
error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

或者

Error 2
error LNK1120: 1 unresolved externals

Error 1
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

这是两种特别常见的错误对于刚開始学习的人。就算是其它程序猿,也有时候会写成这样。

错误的意思就是:本来你建project的时候创建的是控制台project,结果主函数写成了WinMain;或者建的是win32project,主函数写成了main。

有的人就是又一次创建一次project,这当然是不好的。VS的不论什么设置都是能够改的,要试着去了解这些东西。改动的地方是:project属性---Linker---System---SubSystem。这里注意一个地方,最好的做法是选择Not Set。为什么呢?这是《Windows核心编程》里说明,这样设置后系统会自己主动匹配主函数。你写成什么project都能够,这才是完美的办法啊!

常见错误3:

Error 1
error C2664: 'BOOL PathFileExistsW(LPCWSTR)' : cannot convert argument 1 from 'const char *' to 'LPCWSTR‘

原因是我使用了一个这条语句,PathFileExists(fileName.c_str())

PathFileExists的參数类型是LPCTSTR。而fileName是string类型,这就跑到之前的话题string怎样转换成LPCTSTR类型。事实上仅仅要使用.c_str()类型就能够,这个函数并非仅仅对char*有效,它会进行推断。假设是wchar_t*也会对应的转换。出现这个错误是Character Set的设置问题,非常easy,出现这样的错误,直接将project属性---General---Character Set设置为Not Set就可以。

统一使用通配类型,符合兼容性就可以。

常见错误3:

pointer to incomplete class type is not allowed

这个错误在我这里是由于缺少必须的头文件。

这个事实上也非常easy犯错。当project非常大的时候,须要加非常多头文件,漏掉几个非常正常,因此赶紧记下来。

常见错误4:

Error 1
error LNK1181: cannot open input file 'base_MT

这样的错误是非经常见的。我们要使用其它的lib库,包括进来却发现链接错误。这样的错误其它也非常easy。

就是IDE占不到这个lib文件导致的。

我们要加入一个lib文件。要在'project属性里面的Linker/Librarian中找到Additional Library Directories加入正确的lib路径。

而且找到Additional Dependencies,在里面把lib名称写进去。

这样才干正确找到。只是我的这个错误是在正确配置了上面两项之后依旧提示的,终于我发现。是我少加了lib扩展名。一般电脑的默认设置都是不显示扩展名和隐藏关键文件的。这对开发可不方便。我就是在复制lib名称的时候没有复制lib后缀,导致出错。

如今仅仅需把Additional
Dependencies里面的base_MT改为base_MT.lib就可以通过编译。

********************************************************************************************

自己遇到的错误1:

Error 1
error C2664: 'INT_PTR DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM)' : cannot convert argument 4 from 'bool (__stdcall *)(HWND,UINT,WPARAM,LPARAM)' to 'DLGPROC'e:\virtualdesktop\virtualdesktop\virtualdesktop.cpp171VirtualDesktop

2 IntelliSense: argument of type "bool (__stdcall *)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)" is incompatible with parameter of type "DLGPROC"e:\VirtualDesktop\VirtualDesktop\VirtualDesktop.cpp175VirtualDesktop

怎么会出现这样的错误呢?我就写了个简单的程序,例如以下:

bool WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return false;
} int APIENTRY WinMain(HINSTANCE hInstexe, HINSTANCE, PSTR nCmdLine, int nCmdShow)
{
DialogBox(hInstexe, MAKEINTRESOURCE(IDD_DIALOG1), NULL, Dlg_Proc);
return 0;
}

仅仅是启动一个对话框,可是就是提示Dlg_Proc这个函数有问题。后来我对照一个正确的代码发现。原来是函数的返回值bool。正确的返回值是BOOL,这两个不同吗?当然是不同的。

typedef int                 BOOL;

看到了吧?类型是错误的,难怪会出错呢!基础不扎实,并且也不细心。

自己遇到的错误2:

error C2385: ambiguous access of 'DuiDdxControl'

字面上是模糊不清的定义,应该是这个DuiDdxControl这块定义的有歧义,可是怎样下手呢?想了想,自己近期修改的地方就是加入了父类。

于是进入父类看了下,原来父类中继承了一个模板类。而我的类也继承了这个。继承了两个一样的类。导致出现了歧义

VS编程常见的编译和链接错误的更多相关文章

  1. 使用NDK r10构建Cocosd-x v3.2时编译和链接错误的解决办法

    如果你使用NDK r10构建Cocos2d-x v3.2,将会遇到所有测试用例编译错误以及Lua测试用例链接错误. 1. 编译错误 错误信息是: 1 2 3 4 5 6 7 8 /Users/ming ...

  2. C++常见gcc编译链接错误解决方法

    除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdy ...

  3. 【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)

    inplace: 如修改一个文件等对象时, inplace=True,不创建新的对象,直接在原始对象上尽心修改: inplace=False,在对原始对象进行修改,而会创建新的对象: vanity u ...

  4. 模板函数(template function)出现编译链接错误(link error)之解析

    总的结论:    将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...

  5. Ogre1.6.5 编译链接错误之FreeImage

    这两天想重新学习下ogre,但是在vs2010上编译1.6.5的版本上遇到链接失败的问题,耗了不少时间这里记一下. 主要是一些重定义报错. >msvcprtd.lib(MSVCP100D.dll ...

  6. Xcode常见的编译、运行等错误的解决

    Xcode常见的编译.运行等错误的解决 项目没找到Info.plist的错误 The solution for this particular instance of the error was “I ...

  7. 由于C++类库版本不同导致的OpenCV编译链接错误

    太长不看版:GCC4和GCC5使用的C++标准库下,string的名字不一样,导致链接错误. 之前在Ubuntu下使用OpenCV的时候一切正常.后来再次编译的时候,连接器提示有些库函数找不到: ma ...

  8. 常见反编译产生错误 k__BackingField 解决办法

    常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错       private bool <EnableRuntimeHandler> ...

  9. [问题记录]libpomelo工程调整编译链接错误

    1. 描述: 如下图所示,出现链接错误.那么链接问题一般也就两块设置: (1)包含路径Additional Library Directories (2)lib库的包含Additional Depen ...

随机推荐

  1. Uva 12889 One-Two-Three

      Your little brother has just learnt to write one, two and three, in English. He has written a lot ...

  2. Codeforces Round #293 (Div. 2) C. Anya and Smartphone 数学题

    C. Anya and Smartphone time limit per test 1 second memory limit per test 256 megabytes input standa ...

  3. EXPLAIN 用法

    重点是第二种用法,需要深入的了解. 先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+--- ...

  4. Linux High Availabi RHCS

    -----本文大纲 简介 术语 环境配置 实现过程 命令行管理工具 ------------- 一.简介 RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件.红帽集群套件 ...

  5. Tasker to auto record incoming or outgoing call

    Tasker to auto record incoming or outgoing call most of time, i was thinking of tasker can do the jo ...

  6. How to check Ubuntu version

    Below you can find some tips on how to check Ubuntu version you are currently running. The first pla ...

  7. C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性

    有网友发消息来询问,C#如何遍历系统已经安装的所有打印机,并获得每个打印机的相关信息,如:端口,名称等等 C#里面,虽然在 System.Drawing.Printing 这个namespace下,提 ...

  8. javascript 实现页面加载完的操作

    document.onreadystatechange = function () { if (document.readyState == "complete") {//页面加载 ...

  9. 报错:具有键"..."的ViewData项属于类型"...",但它必须属于类型"IEnumerable<SelectListItem>"

    报错:具有键"..."的ViewData项属于类型"...",但它必须属于类型"IEnumerable<SelectListItem>&q ...

  10. 转:在两个页面间翻转设置Animation动作的一些总结

    今天碰到两个页面之间翻转的动作设计问题,发现了一些问题,故做个总结,很多都写在注释部分: 1.首先,我们来手动创建两个view以及相应的viewController.是手动,不是用IB (1)刚开始只 ...