常见错误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. [POI2015]Trzy wieże

    [POI2015]Trzy wieże 题目大意: 给定一个长度为\(n(n\le10^6)\)的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得在这一段内出现过的所有字符 ...

  2. 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2335  Solved: 1373[Submit][Stat ...

  3. BTSync 2.0 Vs. 1.4 Folders

    Sync 2.0 supports boths new 2.0 folders and classic 1.4 folders, s o when you upgrade your Sync it w ...

  4. MySQL:按前缀批量删除表格

    想要实现mysql>drop table like "prefix_%" 没有直接可用的命令,不过可以通过mysql语法来组装, SELECT CONCAT( 'DROP T ...

  5. C# 获得当前 进程 或 线程的ID

    如果获得当前进程的Id用: Process[] processes = Process.GetProcesses(); foreach(Process process in processes) {  ...

  6. 聊聊JVM的年轻代(转)

    聊聊JVM的年轻代 本文转自http://ifeve.com/jvm-yong-generation/ 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代 ...

  7. dwz navtab 限制打开数量实例

    本文章给大家介绍一个dwz navtab 限制打开数量实例,希望此教程对各位同学会有所帮助 openTab: function(tabid, url, options){ //if found tab ...

  8. java程序的运行方式

    1.JAR File JAR 文件用于压缩和发布,而且还用于部署和封装库.组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用 有点类似于net中的dll 2.Runnable JAR Fil ...

  9. git 经常使用操作集锦

    创建仓库 新建普通仓库: jxdong@ubuntu-server:~/workspace/git$ git init Reinitialized existing Git repository in ...

  10. 数学图形之莫比乌斯带(mobius)

    莫比乌斯带,又被译作:莫比斯环,梅比斯環或麦比乌斯带.是一种拓扑学结构,它只有一个面(表面),和一个边界.即它的正反两面在同一个曲面上,左右两个边在同一条曲线上.看它的名字很洋气,听它的特征很玄乎,实 ...