我编写了一个简单的代码来执行两个向量的减法,当我想在“if条件”中返回“EXIT_FAILURE”时,我有一个错误说“无法将'1'从int转换为std ::向量”。在我的代码中,我包含了“cstdlib.h”,其中定义了EXIT_FAILURE,这是我的代码(在IDE eclipse中开发):
std::vector<double> substract_two_vectors(std::vector<double> const
&vect1,std::vector<double> const &vect2)
{
//the second vector is substracted from the first one
int size_vect1 = vect1.size();
int size_vect2 = vect2.size();
if(size_vect1!=size_vect2)
{
printf("Error, The vectors to substract should have the size size \n");
return EXIT_FAILURE;
}
//declare the vector to be filled and returned afterwards
std::vector<double> result(size_vect1);
for(int i=0;i<size_vect1;i++)
{
result[i]=vect1[i]-vect2[i];
}
return result;
}
我不知道为什么我有这个错误,因为我有一个C代码,我做了完全相同的事情,我没有这个错误。
提前感谢您的帮助。
-J
答案 0 :(得分:1)
您的函数属于std::vector<double>
类型,并且您尝试返回类型为int
的{{3}}宏。将函数修改为类型int
,抛出异常或返回空向量:
return std::vector<double>{};
答案 1 :(得分:1)
我相信你想要的是
std::exit(EXIT_FAILURE);
@Ron正确告诉了什么是问题。
现在,让我提出或多或少的C ++解决方案。
std::vector<double> substract_two_vectors(std::vector<double> const &lhs,
std::vector<double> const &rhs)
{
if (lhs.size() != rhs.size())
{
throw std::invalid_argument{"vectors must be of equal sizes"};
}
std::vector<double> result(lhs.size());
std::transform(lhs.begin(), lhs.end(), rhs.begin(), result.begin(),
[](double lhs, double rhs) {return lhs - rhs;});
}
在更高层次上思考,否则使用C ++没有意义。有效的抽象是C和C ++之间的签名差异。