1

环境:Windows 7 Professional + octave 3.6.2 + Visual C++

根据教程,我试图将 octave 嵌入到独立的 C++ 程序中:

http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

我设法运行第一个程序没有问题,但第二个给出错误消息。

第二个程序的简化版

int main (void)
{
    string_vector argv (2);
    argv(0) = "embedded";
    argv(1) = "-q";
    octave_main (2, argv.c_str_vec(), 1);

    Matrix a_matrix = Matrix (1, 2);
    std::cout << "GCD of [12, 16] is ";


    a_matrix(0)=12;
    a_matrix(1)=16;

    octave_value_list in = octave_value (a_matrix);
    octave_value_list out = feval ("gcd", in, 1);

    std::cout<<out(0).matrix_value()<<std::endl;
    return 0;

}

带有“feval”的行未能执行。原因是在 octave 3.6.2中,函数gcd 不再接受值列表作为参数,必须调用gcd(value1, value2, ...)而不是 gcd([value1, value2, ...]) ,它在 octave 3.2.4 中得到支持,所以这里提出了我的主要问题:

如何将多个参数作为单独的值传递给 feval,以便我可以通过 octave 的 C++ API 调用 gcd(value1, value2, ...) 之类的函数?

最终,我需要在 GUI 应用程序中进行一些图形处理,所以我可能需要在 C++ 端调用 conv2 之类的函数(遗憾的是,这也需要多个函数参数)

预先感谢您的任何帮助

4

2 回答 2

0

好吧,我刚刚做了下面的替换:

//octave_value_list in = octave_value (a_matrix);
octave_value_list in;
for (octave_idx_type i = 0; i < n; i++)
   in(i) = a_matrix (i);

它工作......但我得到一个jre错误。

于 2013-05-28T19:49:50.777 回答
0

事实证明,直接将octave_value_list作为输入传递,而不是使用 octave_value 将Matrix转换为 octave_value_list 效果很好。(也许octave_value是罪魁祸首?)

所以octave 3.6.2下的工作代码是这样的:

int main (void)
{
    string_vector argv (2);
    argv(0) = "embedded";
    argv(1) = "-q";
    octave_main (2, argv.c_str_vec(), 1);

    std::cout << "GCD of [12, 16] is ";

    // Use octave_value_list directly as input
    octave_value_list in(2);    
    in(0)=12;
    in(1)=16;

    octave_value_list out = feval ("gcd", in, 1);

    std::cout<<out(0).int_value()<<std::endl;
    return 0;

}
于 2014-07-11T03:19:35.057 回答