我正在编写一个 c++ oct 文件,我想将它用作我的 c++ 代码和用 Octave 编写的脚本之间的链接。我可以毫无问题地构建和执行,只要我做简单的事情,它似乎就可以工作。我什至可以在脚本文件中调用函数feval()
!我似乎无法弄清楚如何执行整个脚本文件..
如果我尝试这个简单的程序,我会得到一个错误,但我不知道为什么
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/parse.h>
#include <octave/toplev.h> // for do_octave_atexit
#include <iostream>
#include <string>
using namespace std;
void runscript(const string &file) {
cout << "attempting to run: " << file << endl;
int parse_status = 0;
eval_string(file, false, parse_status);
cout << "parse_status: " << parse_status << endl;
eval_string(file, false, parse_status, 0); // I'm not sure what the difference here is or
// what the value 0 means, I can't find any documentation on
// what `hargout` is.. See Note {1} below
cout << "parse_status: " << parse_status << endl;
}
int main(int argc, char **argv) {
// Set-up
char *oct_argv[3] = {(char*)"embedded", (char*)"-q", (char*)"--interactive"};
octave_main(3, oct_argv, true);
// Attempt to run script
runscript("Script1");
runscript("Script1.m");
// `a` should be defined after running Script1.m..
octave_value_list a = get_top_level_value("a", false);
do_octave_atexit ();
return 0;
}
Script1.m 非常简单,看起来像这样:
a = 1000;
a
当我跑步时,我总是得到这个输出:
attempting to run: Script1
error: invalid call to script /Users/Daly/Documents/School/EECS/Labs/GitHub/deep/Octave/ Script1.m
parse_status: 0
parse_status: 0
attempting to run: Script1.m
parse_status: 0
parse_status: 0
error: get_top_level_value: undefined symbol 'a'
它只会在第一次抱怨无效调用,无论我尝试 eval_string 多少次或以什么顺序。
注意:{1} 搜索后error: invalid call to script
,我发现此源代码在第 00155 行会引发此确切错误,如果nargout
不是 0,所以我认为它们可能相关?
但无论如何,也许这不是正确的方法。从 octave 嵌入式 c++ 程序执行整个 octave 脚本的正确方法是什么?谢谢!