【问题标题】:Error: Expected constructor, destructor, or type conversion before '<' token - Function Declaration错误:“<”标记之前的预期构造函数、析构函数或类型转换 - 函数声明
【发布时间】:2020-11-29 17:05:10
【问题描述】:

代码是:

#include <ctime>
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <iterator>
#include <queue>
#include <algorithm>
#include <string>
#include <cassert>
#include <cmath>
#include <iomanip>
#include <new>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;

using std::vector;

    #include <boost/numeric/ublas/matrix.hpp>
    #include <boost/numeric/ublas/io.hpp>
    #include <boost/numeric/ublas/operation.hpp>
#include <boost/numeric/ublas/vector.hpp>

    using namespace boost::numeric::ublas;

    boost::numeric::ublas::matrix<double> A_MATRIX(A_MATRIX_ROWS,A_MATRIX_COLUMNS);
    boost::numeric::ublas::matrix<double> Y_MATRIX(A_MATRIX_ROWS,1);


    vector <double> GPSR_BB(boost::numeric::ublas::matrix<double> &f_Y_MATRIX,boost::numeric::ublas::matrix<double> &f_A_MATRIX,int f_tau,int f_tolA){

vector<double> objective(2);

//sth inside function

return objective;

    }

    int main(){
        vector<double> objectives(maxiter+2);
        objectives=GPSR_BB(Y_MATRIX,A_MATRIX,tau,tolA);
        return 0;
    }

排队

vector <double> GPSR_BB(boost::numeric::ublas::matrix<double> &f_Y_MATRIX,boost::numeric::ublas::matrix<double> &f_A_MATRIX,int f_tau,int f_tolA){

我收到此错误

错误:在“

非常感谢任何帮助。谢谢

编辑:我编辑了代码,并做了你告诉我的一切。我感谢所有的帮助,但错误仍然存​​在。我想,问题是因为矩阵数据类型,来自 boost 库,我必须将其传递给函数。

还有什么建议吗?

【问题讨论】:

  • 我在任何地方都看不到#include &lt;vector&gt;using std::vector。修复可能就像添加缺少的包含一样简单,然后在您现在拥有vector 的地方输入std::vector,或者在#include &lt;vector&gt; 之后添加using std::vector。 (我认为这里的大多数人都会反对using 声明......)
  • 正如@JoeZ 所说,如果这不起作用,只需提供有关错误的更多信息以及哪一行有该错误
  • 这是你的完整代码吗?
  • @JoeZ 我敢打赌它应该是boost::numeric::ublas::vector 而不是std::vector。再证明using namespace 是个坏主意。
  • 我有 #include 或使用 std::vector,但我忘了写。我猜问题是关于函数定义。

标签: c++ boost c++11


【解决方案1】:

不完全确定这是问题所在,但您尚未包含 vector.h 或声明“使用命名空间 std”,因此该范围内的矢量可能未定义。

【讨论】:

  • 我敢打赌它应该是boost::numeric::ublas::vector 而不是std::vector。再证明using namespace 是个坏主意。
  • @Angew 答案相同,但#include &lt;boost/numeric/ublas/vector.hpp&gt; ;)
  • 我在使用 STL 上花费了太多时间,对我来说一切都是 std::。我也很少使用“使用”。为了清楚起见,我喜欢显式的命名空间声明。
  • 我添加了这个#include ,还是一样的错误。
  • 我会进一步查看 Y_MATRIX(A_MATRIX_ROWS,1); 可能有些东西无法正常使用 Y_MATRIX 宏并导致下一行无效。
【解决方案2】:

在您的代码中

vector <double> GPSR_BB(boost::numeric::ublas::matrix<double> &f_Y_MATRIX,
  boost::numeric::ublas::matrix<double> &f_A_MATRIX,
  int f_tau,
  int f_tolA){}

您将GPSR_BB 的返回值类型定义为vector&lt;double&gt;,但您将函数体设置为空。所以你不能返回 vector&lt;double&gt; 值。您可能需要在函数内部编写一些代码,并实例化一个 vector&lt;double&gt; 对象,然后返回该对象。

【讨论】:

  • 即使您是对的,但这不是问题的答案,缺少 return 语句不会导致 OP 看到的行为。
  • 正确返回vector double,这里没问题,还是谢谢
猜你喜欢
  • 2018-12-04
  • 2016-03-14
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多