1. 主页 > vs安装问题 > VS2012安装问题 >

vs2012各种错误 FAQ

问题列表:

Q1:error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Q2:ipch文件夹和.sdf文件是什么?怎样可以屏蔽?
Q3fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Q4:无法解析的外部符号

Q5:C++中的文件相对路径? VC++目录中各种目录的相对路径?


问答:

Q1:error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

A1:

原因是从Visual C++ 2005使用了更加安全的run-time library routines。
新的Security CRT functions(就是那些带有“_s”后缀的函数):
http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx

那么如何搞定这些警告和错误呢:
方法一:将原来的旧函数替换成新的Security CRT functions。
方法二:用以下方法屏蔽这个警告。
1.在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
  #define _CRT_SECURE_NO_DEPRECATE
2.#param warning(disable:4996)
3.更改预处理定义:
  项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加_CRT_SECURE_NO_DEPRECATE 
方法三:方法二没有使用新的更安全的CRT函数,显然不是一个值得推荐的方法,可是你又不想一个一个地改,那么还有一个更方便的方法:
  在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:
  #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
  在链接的时候便会自动将旧函数替换成Security CRT functions。
注意:这个方法虽然使用了新的函数,但是不能消除警告(原因见红字),你还得同时使用方法二。。。

来源: 解决方案

Q2:ipch文件夹和.sdf文件是什么怎样可以屏蔽?

A1:

在使用Visual Studio 2012开发C++程序的时候,会发现有一些奇怪的文件被创建出来,比如一个叫ipch的文件夹,和一个与工程同名的.sdf文件,而且ipch下面的文件和.sdf文件都很大,至少有10M,大项目可能超过100M,那这些文件是干什么用的呢?这些文件是Visual Studio用来保存预编译的头文件和Intellisense用的,删除这些文件对于工程的开发完全没有影响。那如果我既想使用预编译的头文件和Intellisense,又不想看到这些无聊的文件该怎么办呢?

在Visual Studio里进入如下设置:进入“Tools > Options”,选择“Text Editor > C/C++ > Advanced”,然后找到“Fallback Location”。然后把“Always use Fallback Location”和“Do Not Warn if Fallback Location Used”设置成“True”就可以了。

如果想把这些文件保存到特定的文件夹,就要设置一下Fallback Location,否则Visual Studio会用系统的临时文件夹来保存这些文件。

然后重启Visual Studio,那些讨厌的文件就不见了。这个设置对于像我这样使用Dropbox来同步代码的人来说尤其有用。

来源:解决方案2

Q3:fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

A3:错误已经很明白告诉你了: 
#error   :     Building   MFC   application   with   /MD[d]   (CRT   dll   version)   requires   MFC   shared   dll   version.   Please   #define   _AFXDLL   or   do   not   use   /MD[d] 

使用多线程动态连接运行时库的MFC程序,   需要使用MFC动态连接库. 
改工程设置: 
Project|Properties|Configuration   Properties|General|Use   of   MFC   :   Use   MFC   in   a 

Shared   DLL 

项目-〉属性-〉use   of   MFC   改成use   MFC   in   a   share   dll

Q4:无法解析的外部符号

A4:

1. lib 文件未引入。可使用“#pragma comment(lib, “winsock.lib”) ”语句添加 lib 引用,也可在项目依赖里添加。

2. 类方法的实现未加类标识。如, “CTest::Connect(void) { … }” 写成了 “Connect(void) { … }”。

3. 缺少 obj 文件。在项目里添加“包含路径”:C:\curl\lib\release-dll\*.obj。

来源:链接解决方案4

Q5:C++中的文件相对路径? VC++目录中各种目录的相对路径?
A5:对于新手,在设置绝对路径时往往会犯浑,他们不清楚这里的“相对”究竟是以什么位置为起点。其实这里的相对路径就是相当于工程文件(XXXX.vcproj)为起点零计算出的能找到包含所需头文件(也就是找包含所需头文件的include目录)的路径。
例如你的工程文件(Count.vcproj)所在目录路径为:
E:\projects\Count\Count\Count.vcproj
该工程需要包含一个图片参数,该图片所在路径如下:
E:\projects\Count\pic\pic01.jpg
这里程序中的相对路径设置如下:
..\\pic\\pic02.jpg

vc工程默认访问的目录是工程目录,相对路径有以下多种形式,:

  //pDummyFile = fopen("dummy.bmp", "rb"); bmp文件就在vc工程目录下,和dsw文件同属一个目录。

  //pDummyFile = fopen("..\\texture\\dummy.bmp", "rb"); 表示bmp文件在工程目录的同级目录texture中,因此路径是先退出工程目录再进入texture目录访问到bmp文件。“”表示退到当前目录的上一级目录(父目录)

  //pDummyFile = fopen(".\\texture\\dummy.bmp", "rb"); 表示bmp文件就在工程目录的子目录texture中,“。”表示当前默认目录,即vc工程目录,然后在进入其子目录texture访问到文件

  注意,对相对路径而言,路径表示中的“\”也要用双斜线"\\"

来源:解决方案5,解决方案6

本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2012anzhuangwenti/2020/0725/4107.html

联系我们

在线咨询:点击这里给我发消息

微信号:PREEE8

工作日:9:30-18:30,节假日休息