使用EXIT_FAILURE C ++时出错

时间:2017-12-01 10:47:34

标签: c++ eclipse

我编写了一个简单的代码来执行两个向量的减法,当我想在“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

2 个答案:

答案 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 ++之间的签名差异。