C++错误汇总

写在前面

只是想记录一下用VS2017编程过程遇到的错误。

错误汇总

  1. 错误 C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)
    C2678
    原因:编译器默认类中"<"等比较符号的函数重载需要加const限定,否则会报错。参考:http://t.zoukankan.com/Braveliu-p-14153482.html。
    解决方法:重载函数后面加const限定。
bool operator<(const TwoDouble& t)const  //注意该const
	{
     
		if (this->x < t.x)
		{
     
			return true;
		}
		else
		{
     
			if (this->x == t.x && this->y < t.y)
			{
     
				return true;
			}
			else
			{
     
				return false;
			}
		}
	}
  1. Debug Assertion Failed! Expression: invalid comparator
    C++错误汇总_第1张图片
    原因:sort(vec.begin(), vec.end(), cmp)函数中的cmp函数需要是严格弱序的。cmp函数的意义为:当返回true的时候,a将排在b的前面,相当于是重载了<号。cmp规定为严格弱序(strict weak ordering)的意思是,当ab相等的时候,ab的顺序不能调换,此时应当返回false值。这是因为在源码中,当程序发现ab相等的时候,会调用两次cmp函数,一次是cmp(a, b),一次是cmp(b, a),两次返回的结果都要是false才不会报错。参考:c++中sort函数调用报错Expression : invalid operator <的内部原理。
    从意义上来说,由于cmp的意义是代替<号,所以两个元素>=的时候应当返回false,只有<的时候才返回true。 另外,由于重载类的<号函数能够代替cmpsort的排序提供指引,所以重载<的时候也要注意在两元素相等的时候返回false
    解决方法:注意函数返回的时候,若两元素相等,则返回false
bool cmp(const IntDouble& a, const IntDouble& b)
{
     
	if (a.value <= b.value)  //降序排序
	{
     
		return false;  //注意相等的时候需要返回false
	}
	else
	{
     
		return true;
	}
}
  1. 错误 LNK2019 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中被引用
    原因:编译器在整个项目中均找不到main()函数,检查是否缺少main函数
    解决方法:在项目中增加main函数
    无法解析的外部符号 _main

你可能感兴趣的:(C++,c++,debug)