5

BoostのuBLAS行列の実装を使用して正常にコンパイルされたプログラムがあります。残念ながら、デバッグ中にマトリックスの内容を確認する方法が見つからなかったため、gdbを使用したデバッグには問題があります。行列Vの要素(存在し、データでいっぱいです)を表示しようとすると、次のようになります。

(gdb) print V(1,1)
Invalid data type for function to be called.

これを回避する方法はありますか?

ありがとう!

4

3 に答える 3

17

呼び出すことができます

V.operator()(1,1)

gdbで

于 2015-02-22T00:06:21.563 に答える
4

これは、GDBがオーバーロードされたの呼び出しをサポートしていないためoperator()です。関数として呼び出そうとしているだけVで、関数ではありません。行列を渡して演算子を呼び出す自立関数を作成できます。

int get_element(matrix const &m,int i,int j) {
    return m(i,j);
}

(gdb) p get_element(V,1,1)
(int) $0 = 43.1

そしてGDBはそれを呼び出すことができるはずです

V必要な値を手動で引き出すために、の表現を手動で調べることもできます。ただし、多くのテンプレートやメタプログラミングを使用するタイプでは、これはおそらく難しいでしょう。

LLDBでサポートされているプラ​​ットフォームで作業している場合は、演算子のオーバーロードの呼び出しをサポートしています。

struct foo {
    int operator()(int i,int j) {
        return 10;
    }
};

(lldb) p f(1,1)
(int) $0 = 10
于 2012-02-25T21:38:07.997 に答える
0

この問題の解決策を探しているときに、このスレッドを見つけました。提案されたソリューションは正常に機能します。ただし、at_elementublas行列の方法を使用することもできます。

于 2013-11-25T19:21:53.433 に答える