Windows编译
总阅读次
This function or variable may be unsafe
vs2015报错:1
2
3
4
5
6
7
8
9
10
11
12Severity Code Description Project File Line Suppression State
Error C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. DLL_ZBLCommunication d:\gx_2017\2017-07\0\dll_zblcommunication\dll_zblcommunication\zblcommunication.cpp 156
Severity Code Description Project File Line Suppression State
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. DLL_ZBLCommunication d:\gx_2017\2017-07\0\dll_zblcommunication\dll_zblcommunication\zblcommunication.cpp 504
Severity Code Description Project File Line Suppression State
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. DLL_ZBLCommunication d:\gx_2017\2017-07\0\dll_zblcommunication\dll_zblcommunication\zblcommunication.cpp 531
解决:
- 工程属性添加预处理命令
在属性页面中找到“C/C++”——”预处理器“,按下图操作单击箭头指向处的按钮
在下面的编辑窗口中添加一句命令:_CRT_SECURE_NO_WARNINGS
添加完成后应用并退出
- 我在代码开头添加
1
unexpected token(s) preceding;'
、type 'int' unexpected
、this declaration has no storage class or type specifer
解决:在出错代码前加
1 |
- ‘<<’没有找到std::string重装数解决办法:
1
Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) g:\vs_project\vs_2013\consolewein32_vs2013\consolewein32_vs2013\vs2013_main.cpp 20 1 consolewein32_VS2013
加上头文件#include<string>
- ntelliSense: no default constructor exists for class “Base”
报错代码:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using namespace std;
class Base
{
private:
int n;
public:
Base(int m) :n(m){ cout << "constructor is called\n"; }
~Base(){}
};
class Derive :public Base
{
private:
int n;
public:
Derive(int m) :n(m)
{
Base(3);
}
~Derive(){}
};
int main()
{
Derive* a = new Derive(10); return 0;
}
解决:
- 两个类有继关系,父类没有显示声明无参构造数,但声明了有参数构函数,必须用参数列列表初始化;
参照文章:C++中必须用参数列表初始化的4种情况
- 在基类里添加无参数构造函数;
- 在xp+vs2005使用
Winbase.h
头文件报错:解决:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77CGxmisCommunication.cpp
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(226) : error C2146: syntax error : missing ';' before identifier 'Internal'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(226) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(226) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(227) : error C2146: syntax error : missing ';' before identifier 'InternalHigh'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(227) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(227) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(230) : error C2146: syntax error : missing ';' before identifier 'Offset'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(230) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(230) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(231) : error C2146: syntax error : missing ';' before identifier 'OffsetHigh'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(231) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(231) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(234) : error C2146: syntax error : missing ';' before identifier 'Pointer'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(234) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(234) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(237) : error C2146: syntax error : missing ';' before identifier 'hEvent'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(237) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(237) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(241) : error C2146: syntax error : missing ';' before identifier 'nLength'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(241) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(241) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(242) : error C2146: syntax error : missing ';' before identifier 'lpSecurityDescriptor'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(242) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(242) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(243) : error C2146: syntax error : missing ';' before identifier 'bInheritHandle'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(243) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(243) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(247) : error C2146: syntax error : missing ';' before identifier 'hProcess'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(247) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(247) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(248) : error C2146: syntax error : missing ';' before identifier 'hThread'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(248) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(248) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(249) : error C2146: syntax error : missing ';' before identifier 'dwProcessId'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(249) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(249) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(250) : error C2146: syntax error : missing ';' before identifier 'dwThreadId'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(250) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(250) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(261) : error C2146: syntax error : missing ';' before identifier 'dwLowDateTime'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(261) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(261) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(262) : error C2146: syntax error : missing ';' before identifier 'dwHighDateTime'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(262) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(262) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(272) : error C2146: syntax error : missing ';' before identifier 'wYear'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(272) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(272) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(273) : error C2146: syntax error : missing ';' before identifier 'wMonth'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(273) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(273) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(274) : error C2146: syntax error : missing ';' before identifier 'wDayOfWeek'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(274) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(274) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(275) : error C2146: syntax error : missing ';' before identifier 'wDay'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(275) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(275) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(276) : error C2146: syntax error : missing ';' before identifier 'wHour'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(276) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(276) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(277) : error C2146: syntax error : missing ';' before identifier 'wMinute'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(277) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(277) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(278) : error C2146: syntax error : missing ';' before identifier 'wSecond'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(279) : error C2146: syntax error : missing ';' before identifier 'wMilliseconds'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(279) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(279) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(283) : error C2065: 'WINAPI' : undeclared identifier
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(283) : error C2065: 'PTHREAD_START_ROUTINE' : undeclared identifier
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(283) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h(283) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Generating Code...
Compiling...
Serial.cpp
不能直接使用#include <Winbase.h>
应该改为#include <Windows.h>
- Error C1083 Cannot open include file: ‘windows.h’: No such file or directory
出错环境 win10+vs2015+Berkeley DB XML 6.0.18
实际解决:
把工程属性中VC++ Directories
中选项:Library Directories
、Include Diretories
设置Berkeley DB XML 6.0.18相应路径
- C1073: Internal error involving incremental compilation
Severity Code Description Project File Line Suppression State
Error C1073 Internal error involving incremental compilation(compiler file ‘f:\dd\vctools\compiler\cxxfe\sl\p1\c\p0io.c’, line 997) UnitTest d:\github\crcpp\inc\crc.h 1
解决:
工程属性—> Configuration Properties——>C/C++——–>Code Generation—–>Enable Minimal Rebuild :No(/Gm-)
- error LNK2005: _DllMain@12 already defined解决办法:
1
2
3
4LINK : warning LNK4076: invalid incremental status file 'C:\DLL_TVM_ZZ14A\TVM_Driver_ZZ14A\Debug\ZZ14AGeneralControlTVM.ilk'; linking nonincrementally
mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in ZZ14AGeneralControlTVM.obj
Creating library C:\DLL_TVM_ZZ14A\TVM_Driver_ZZ14A\Debug\ZZ14AGeneralControlTVM.lib and object C:\DLL_TVM_ZZ14A\TVM_Driver_ZZ14A\Debug\ZZ14AGeneralControlTVM.exp
C:\DLL_TVM_ZZ14A\TVM_Driver_ZZ14A\Debug\ZZ14AGeneralControlTVM.dll : fatal error LNK1169: one or more multiply defined symbols found
创建MFC的DLL工程时,预处理器使用了_USRDLL选项,其意思是说:在DLL连接MFC库的时候使用静态连接的方式。而本身MFC的库中带有_DllMain函数的定义,造成重定义。
Configuration Properties—>C/C++—–>Preprocessor:—->Preprocessor Definitions:去掉_USRDLL
选项
- Compiler Error C2065
如果在源码文件里有声明了变量,但是却总是报错 ‘identifier’:undeclared identifier,首先检查文件编码格式问题
vs2005使用Berkeley DB XML 2.3.10编程的时候报连接错误
在使用C++编程的时候连接问题
1 | main.obj : error LNK2019: unresolved external symbol "public: __thiscall Dbt::~Dbt(void)" (??1Dbt@ ) referenced in function _main |
工程属性设置:Configuration Properties
—>C/C++
填上:
C:\Program Files\Oracle\Berkeley DB XML 2.3.10\include
Configuration Properties
—>Linker
—> Input
填上: libdb45d.lib
参考文章
http://www.91linux.com/Berkeley_DB/2014/0131/5719.html
- 找不到“kernel32.lib”更改项目属性为 XP
1
2
3
4
5警告 1 warning MSB8003: Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets 355 5 test
错误 2 error LNK1104: 无法打开文件“kernel32.lib” c:\Users\vm_win7x86\documents\visual studio 2013\Projects\test\test\LINK test
boost配置报错
- LNK1104
1
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-gd-1_57.lib
原因:
boost库编译时用的link=shared runtime-link=shared threading=multi,所以生成的是 boost_thread-vc100-mt-gd-1_57.dll和导出库 boost_thread-vc100-mt-gd-1_57.lib。
解决办法:
project –> Property—-> Configuration Properties—>C/C++—->Preprocessor–(右边选项卡)——>Preprocessor Definitions—(添加)—->BOOST_ALL_DYN_LINK
参考[C/C++]使用boost时无法连接到正确的库,提示fatal error LNK1104
- boost程序运行报错找不到动态库
1 | The code execution cannot proceed because boost_thread-vc100-mt-gd-1_57.dll was not found.Reinstalling the program may fix this problem. |
解决:
把缺失的dll, 放入程序运行目录下即可解决