原因: 在for循环中默认vecScanData.size()时unsigned int类型,而 i常常写成int类型,改成size_t(计算数组大小或索引)就行。
解决: 宏定义要在 #include
编译器例行警告。如果对精度没太大要求,不用理会。c++是截断的,无四舍五入。
顾名思义,vs项目属性配置里输出文件路径没有以\结尾,编译器自动帮你加了,所以加“\”就可以。
当你试图给一个表达式赋值时会有此提示。即=赋值号左侧的只能是变量。
原因:头文件重复包含,既有windows.h,又有前者已经包含的系统文件出现。
解决:①删除被包含的系统文件,只留下windows.h
②调换顺序,使得windows.h文件在上方,确保其先执行。
原因:
> windows.h和winsock2.h存在有类型重定义,往往体现在VC程序中包含winsock2.h时出现编译错误:
解决:在VS项目属性->C/C++预处理器定义中添加如下代码:
WIN32_LEAN_AND_MEAN
原因:不小心使用了系统关键字。
解决:养成好的习惯,永远把系统文件放在最前面,如Windows.h。
看到一位博主有写3、4两个错误同时出现,我也是这样,然后给出的解决办法是:在项目配置属性->常规->字符集选择 未设置。确实解决了。
error C4430: 缺少类型说明符 - 假定为 int。
可能有3种原因:
①循环引用
即我中有你,你中有我,虽然咱俩关系好,但也不能到这种地步吧。
②语法错误
符号如;英文写成了中文,你不倒霉谁倒霉。
③类的顺序错误
如果一个类的成员中包含另一个类,则被包含的类的生命一定要在包含的类之前。你想想小弟是不是永远冲锋在前 。
error C2893: 未能使函数模板“unknown-type std::invoke(_Callable &&,_Types &&…) noexcept()”专用化
原因:thread定义线程实参和形参数据类型不同,导致出现重载错误。即参数给错了。这里调用的函数存在参数,而线程里没有给出。
解决办法:把参数给人家。
字符集的问题,改为多字节字符集就可以。
多为链接的库没有或不对。
转载这里
确定是那种程序还要有对应的main入口函数实现才行。
补充:本质是缺main函数,但如果你定义了一个main类来作为另一个项目的主类编译时也报这个错误,那么你需要检查一下另一个项目的属性——>配置类型必须是lib/dll库类型,而不是.exe类型(很容易忘记修改)。
类似问题首先检查static变量有没有在cpp文件类外初始化。
注意初始化格式要正确。
打开项目属性页,将语言——>符合模式修改为 否。
经检查,是由于①自己在一个全局定义头文件中定义了一个全局变量:
string a = xxx;
②而且自己在多处引用了这个全局头文件,造成了变量重定义的错误。
插一个网上别人遇到的类似情况:
是由于同样全局定义了变量,是在一个类的头文件引用该变量,然后该类的.cpp文件又包含了该类头文件,所以造成了重复定义。
调试时出现此弹窗报错,点中止(vs下),会定位到出现问题的地方。导致出现此错误的原因大致有以下几点:
① 非法指针访问和内存泄漏
② 指针访问内存越界出现问题
③ 不支持中文
④ 内存不够分配
⑤ 可能有多线程访问资源导致的问题
⑥ 代码库等版本不同可能导致
大多数原因还是指针和内存问题,好好检查代码:
第一:检查存储容器申请的空间有没有释放,下标访问是否越界
第二:检查堆栈空间是否已经被全部分配满,建议每次分配内存不要太大,记得释放。
第三:指针指向了不可预期的内存位置,即非法访问。
这个下标越界几乎是我遇到最多次的问题了。。。大多数情况下,出错是因为代码的逻辑有问题。比如
①vector的size为0,而你还要使用下标去访问它
②在for循环下,使用循环变量(如 i )作为下标访问vector元素时,要注意 i 是不是连续的,不连续的访问也会越界出错
③最近遇到的隐蔽越界。当vector的size=0时,size() - 1这样的操作是危险的,因为 (假设为a) a.size()本身是无符号整数,那相应的 a.size() - 1也是无符号整数,此时若忽略了这点仍然作为下标访问就会出错。,所以尽量避免使用/或者在前面加int强转一下。
④ 使用某些外来变量作为vector下标时,一定要注意它的范围!
⑤ 类似的,如果你还没有为vector分配足够的空间就去访问,自然越界异常
总之,好好检查代码逻辑。
我翻译为: 你定义的函数使用了auto类型声明,却没有尾随返回类型。
解决办法:
确认你的返回值实际是什么类型,在函数声明时就把auto设为什么类型。
比如想要返回多个返回值,使用元组存返回值,就在声明函数类型时声明为auto类似这种。
这个我遇到是在linux下编译时,windows下不存在此情况。