1

環境: Windows 7 Professional + オクターブ 3.6.2 + Visual C++

チュートリアルに従って、オクターブをスタンドアロンの C++ プログラムに埋め込もうとしていました。

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

最初のプログラムは問題なく実行できましたが、2 番目のプログラムではエラー メッセージが表示されます。

2 番目のプログラムの簡易版:

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 に渡すにはどうすればよいですか?

最終的には、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

Matrixoctave_valueoctave_value_listに変換する代わりに、octave_value_listを入力として直接渡すと、問題なく動作することがわかりました。(おそらくoctave_valueが犯人ですか?)

したがって、オクターブ 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 に答える