我有一个使用 Boost 的 uBLAS 矩阵实现成功编译的程序。唉,使用 gdb 进行调试被证明是有问题的,因为在调试时我无法查看矩阵的内容。当我尝试查看矩阵 V 的元素(确实存在并且充满数据)时,我得到:
(gdb) print V(1,1)
Invalid data type for function to be called.
有没有解决的办法?
谢谢!
我有一个使用 Boost 的 uBLAS 矩阵实现成功编译的程序。唉,使用 gdb 进行调试被证明是有问题的,因为在调试时我无法查看矩阵的内容。当我尝试查看矩阵 V 的元素(确实存在并且充满数据)时,我得到:
(gdb) print V(1,1)
Invalid data type for function to be called.
有没有解决的办法?
谢谢!
一个可以打电话
V.operator()(1,1)
在 gdb 中
这是因为 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
我在寻找这个问题的解决方案时发现了这个线程。建议的解决方案工作正常。但是,您也可以使用at_element
ublas 矩阵的方法。