您的位置:首页 > 编程语言 > C语言/C++

C/C++问题汇总

2016-07-21 16:55 281 查看

1 . error C2371: ......重定义;不同的基类型

原因:多次引用类.结构体等的定义,使得提示重复定义。

解决:在每个头文件中,头文件第一行如下定义,使头文件只被引用一次

#pragma once

2. <windows.h> <winsock2.h>冲突

原因:<windows.h>中主动引用了<winsock.h>使得最新的冲突或无效
解决:(1)任何地方如有<windows.h>,先包含<winsock2.h>再包含<windows.h>
(2)<windows.h>前定义宏 #define WIN32_LEAN_AND_MEAN

很多情况下,由于没有使用stafx.h预编译,四处引用windows.h,导致上述方法失效。

大杀器就是:项目属性-------c/c++-------预处理器-------预处理器定义中:添加WIN32_LEAN_AND_MEAN,项目一次设置有效

3. error C2360: ...的初始化操作由"case"标签跳过

原因:case a: xxx 执行代码未放入{}代码块内,编译时可能未执行。

解决:执行代码放入{xxx}内。

4. error C2259: "不能实例化抽象类"

原因:子类在继承父类后,有virtual虚方法没有在子类中实现,导致子类仍然是一个抽象类,无法实例化;

           有时未实现虚方法,有时子类方法名错误,误以为已经实现。

5. error C2280: “尝试引用已删除的函数"

现象:类中有std::unique_ptr<Type> param成员变量,提供Get/Set方法供外部调用,在外部通过Get获取该智能指针对象时,编译提示上述错误。

原因:unique_ptr<Type>智能指针人如其名,是一种定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权——两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。unique_ptr在超出作用域,即以下情况时它指向的对象会被摧毁:

unique_ptr指向的对象被破坏

对象通过operator=()或reset()被指定到另一个指针)

unique_ptr还可能没有对象,这种情况被称为empty。例如:

std::unique_ptr<int>p1(new int(5));
// 编译会出错, error c2280:引用已删除的函数不提供拷贝构造函数的实现或拷贝构造函数为私有
std::unique_ptr<int>p2=p1;
// 转移所有权, 现在那块内存归p3所有, p1失效
std::unique_ptr<int>p3=std::move(p1);
//释放内存.
p3.reset();
//无效
p1.reset();

6. ntdll.dll!  0xC0000005:  读取位置 0xFEEEFEEE 时发生访问冲突

说明指针所指向的空间已经被释放...... 需查看哪些对象/指针被提前释放,导致使用时出现异常。

7. 调试技巧

system("pause")   ,  等效于控制台中暂停。

OutputDebugA("abc"). vc下打印char * / string 字符串内容

8. VS运行缓慢/vcpkgsrv.exe后台进程多

VS安装完毕,在自动提示/代码跳转时明显感觉卡、慢,查看后台进程发现多出数个vcpkgsrv.exe进程。

查询得知是VS的Intellisence智能感知在搞鬼,取消操作如下:

工具----选项-----文本编辑器-----c/c++----高级----:选项“禁用Intellisence” 设为True.

st.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ERROR c语言