从C ++调用GNU Octave时编译错误

问题描述

我正在尝试编写一个将Octave解释器嵌入C ++的函数,如此处https://octave.org/doc/v4.0.1/Standalone-Programs.html所述。

我正在尝试使用我在Eclipse中编写的程序来执行此操作,并尝试在Linux上使用GCC进行编译。我希望能够调用外部脚本,如链接中的第二个示例所示。

到目前为止,我的代码是这样的.....

#include <iostream>
#include <oct.h>
#include <octave.h>
#include <parse.h>
#include <interpreter.h>

using namespace std;

class OctaveInt {

public:
    void callOctave (double,int,string);
    OctaveInt(string path );

private:
    octave::interpreter interpreter;
};

// Member functions including constructor..
OctaveInt::OctaveInt(string path)
    {
    // Constructor - initialises engine and sets path
    int status = interpreter.execute();
    octave_value_list p;
    p(0) = path;
    octave_value_list o1 = octave::feval ("addpath",p);
    }


void OctaveInt::callOctave(double params,int size,string name) {

    std::cout << "Hello World" << std::endl;

    int n = 2;

    octave_value_list in;
    octave_value_list p;

    for (octave_idx_type i=0; i < size; i++)
        in(i) = octave_value(params[i]);


    octave_value_list out = octave::feval (name,in);

    std::cout << "Output is ";
    std::cout << out(0).int_value();

}


int main() {

    double params[] = {100,2,3,4,5,6};
    int size = 6;
    string path = "/home/arwel/eclipseWorkspace_new/octaveCaller/src/";
    OctaveInt octI(path);
    octI.callOctave(params,size,"myFunction");

    return 0;

}

但是,当我尝试编译时,出现了一系列错误.....

Invoking: GCC C++ Compiler
g++ -std=c++0x -I/usr/include/octave-5.2.0/octave/ -I/usr/share/octave/5.2.0/etc/tests -I/usr/lib/x86_64-redhat-linux6E -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/octaveCaller.d" -MT"src/octaveCaller.o" -o "src/octaveCaller.o" "../src/octaveCaller.cpp"
../src/octaveCaller.cpp: In constructor ‘OctaveInt::OctaveInt(std::string)’:
../src/octaveCaller.cpp:31:6: warning: unused variable ‘status’ [-Wunused-variable]
  int status = interpreter.execute();
      ^
../src/octaveCaller.cpp: In member function ‘void OctaveInt::callOctave(double,std::string)’:
../src/octaveCaller.cpp:48:32: error: invalid types ‘double[octave_idx_type {aka long int}]’ for array subscript
   in(i) = octave_value(params[i]);
                                ^
../src/octaveCaller.cpp:42:6: warning: unused variable ‘n’ [-Wunused-variable]
  int n = 2;
      ^
../src/octaveCaller.cpp: In function ‘int main()’:
../src/octaveCaller.cpp:65:44: error: no matching function for call to ‘OctaveInt::callOctave(double [6],int&,const char [11])’
  octI.callOctave(params,"myFunction");
                                            ^
../src/octaveCaller.cpp:65:44: note: candidate is:
../src/octaveCaller.cpp:38:6: note: void OctaveInt::callOctave(double,std::string)
 void OctaveInt::callOctave(double params,string name) {
      ^
../src/octaveCaller.cpp:38:6: note:   no kNown conversion for argument 1 from ‘double [6]’ to ‘double’
make: *** [src/octaveCaller.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

12:41:36 Build Failed. 3 errors,2 warnings. (took 1s.927ms)

所以看来我在变量类型(??)上遇到了一些问题。

我真的不太了解C ++,所以我无疑在犯一些基本的C ++错误。有人可以帮我弄清楚我在做什么错吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)