编程常见错误

来源:互联网 发布:达内培训java费用 编辑:程序博客网 时间:2024/05/06 18:13

(11)error C2065:”cout”:undeclared identifier

不仅仅要包含头文件,还要命名空间,理解C头文件和C++头文件。

#include <iostream>

using namespace std;

(12)errorC3872:’0x3000’:this character is not allowed inan identifier(error C3872:’0x3000’:此字符不允许在标识符中使用)

主要出现在文档中拷贝程序代码时,由于含有中文字符空格造成的。

解决方法:检查出错的行数的前一行和后一行,删除所有的空格,并确保输入法状态是英文状态,再敲入需要的空格。

(13)error LNK2005:已经在XXX.obj中定义

造成LNK2005重复定义错误主要以下几种情况:

1.      重复定义全局变量。

2.      头文件的包含重复。

3.      使用第三方库造成的。

(14)errorLNK2019:无法解析的外部符号XXX,该符号在函数XXX中被引用。

若是静态库lib或dll,是否添加依赖项?

函数是否定义?

是否包含头文件?

如果是静态库或动态库,解决方法:

代码方式:#pragma comment(lib,"XXX.lib")

设置方式:

右键点击项目名称->属性->链接器->常规->附加库目录->填入需要加的库所在目录

右键点击项目名称->属性->链接器->输入->附加依赖项->填入需要加的库文件名

(15)fatalerror C1083:无法打开包括文件:”XXX.h”:Nosuchfile or directory

右键点击项目名称->属性->C/C++->常规->附加包含目录->填入需要加的库所在目录

(14)(15)注意用相对路径不要用绝对路径,其实最好的方法是:用代码设置。

(16)error C2011:’fd_set’:’struct’ type redefinition,errorC2011: “sockaddr”: “struct”类型重定义

调整头文件的调用顺序,在Windows.h前先引用WinSock2.h,即

#include <Windows.h>

#include <WinSock2.h>

或不调整头文件顺序,在所有#include <Windows.h>前使用#defineWIN32_LEAN_AND_MEAN

(17)error C2110:cannot add twopointer “+”不能添加两个指针

当进行string 对象和字符串字面值混合连接操作时,+操作符的左右操作

数必须至少有一个是string 类型的

(18)fatal error C1189:#error:Please use the /MDswitch for_AFXDLL builds

两个解决方法:1.右键点击项目名称->属性->C/C++->代码生成->运行时库修改成:多线程调试(/MTD)(release版本修改成多线程/MT)

2. 右键点击项目名称->属性->常规->MFC的使用修改为:在静态库中使用MFC。

(19) errorC2061:语法错误:标识符”_TCHAR”

添加#include<tchar.h>

(20) errorC3861:”sprintf”:找不到标识符

包含头文件#include <stdio.h>

(21)Debug版本,编译生成成功,运行,弹出对话框:没有找到mfc90ud.dll<mfcXXX.dll>

项目属性->配置属性->链接器->调试->生成映射文件选择:是(/MAP)

(22)error C2065:’IDD_DIALOG’:undeclared identifier

在主文件中加入#include “resource.h” 

(23)error C2440:’static_cast’:cannot convert from ‘LRESULT(_thiscallCXXDlg::*)(CPoint)’ to ‘UNIT (_thiscall CWnd::*)(CPoint)

因为旧版本的ON_WM_NCHITTEST宏使用了UINT (_thiscall CWzButton::*)(CPoint);类型的类成员函数指针,其定义如下:

#define ON_WM_NCHITTEST()\

{

WM_NCHITTEST,0,0,0,AfxSig_wp,\

(AFX_PMSG)(AFX_PMSGW)(UINT(AFX_MSG_CALL CWnd::*)(CPoint)&OnNcHitTest},

#defineON_WM_NCHITTEST()\

    {WM_NCHITTEST, 0, 0, 0,AfxSig_wp, \

        (AFX_PMSG)(AFX_PMSGW)(UINT(AFX_MSG_CALLCWnd::*)(CPoint)&OnNcHitTest) },

新版本的是:

#defineON_WM_NCHITTEST()\

    {WM_NCHITTEST, 0, 0, 0,AfxSig_l_p, \

        (AFX_PMSG)(AFX_PMSGW)\

        (static_cast<LRESULT (AFX_MSG_CALLCWnd::*)(CPoint)> (&ThisClass ::OnNcHitTest)) },

返回值类型由UINT改成了LRESULT,再加上static_cast的严格检查,所以出错。

解决方法:将OnNcHitTest函数由:

afx_msg UINT OnNcHitTest(CPoint point);

改成:

afx_msg LRESULT OnNcHitTest(CPoint point);

(24)Xdebug Errors:Xdebug(32):error C2365:’operatornew’:redefinition;previous definition was ‘function’

原因:MFC和标准库混用

解决方法:方法一:把所有文件里面#definenew DEBUG_NEW全部删除

方法二:保证使用了new的语句在宏#define newDEBUG_NEW的前面。

(25)fatal errorC1189: #error :  WINDOWS.H already included. MFC apps must not #include<windows.h>

遇到问题情况:
试试把#include<afx.h>挪到最靠前位置;

#import"c:\ProgramFiles\Common Files\System\ADO\msado15.dll" \

        no_namespace rename("EOF","EndOfFile")

#include<afx.h>

解决方法:

把#include<afx.h>挪前不行的话,就看看项目属性里有没有定义_WINDOWS_这个宏,有的话就去掉。


0 0
原创粉丝点击