环境: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”行无法执行。原因是在八度 3.6.2 中,函数 gcd不再接受值列表作为参数,必须调用 gcd(value1,value2 ,. ..)而不是gcd([value1,value2,...]),这是在八度音阶3.2.4中得到支持的,所以这就提出了我的主要问题:
如何将多个参数作为单独的值传递给feval,以便我可以通过octave的C ++ API调用gcd(value1,value2,...)等函数?
最终,我需要在GUI应用程序中进行一些图形处理,所以我可能需要在C ++端调用像conv2这样的函数(遗憾的是,还需要多个函数参数)
提前感谢您的任何帮助
答案 0 :(得分: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错误。
答案 1 :(得分:0)
事实证明直接传递 octave_value_list 作为输入,而不是使用 octave_value 将矩阵转换为 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;
}