我正在编写一个名为Matrix
的矩阵的模板类,我重写了这样的默认构造函数:
template<typename _Tp, size_t m, size_t n> inline
Matrix<_Tp, m, n>::Matrix()
{
for(size_t i = 0; i != m*n; ++i) val[i] = _Tp(0);
}
在我的测试文件中,我写了这个:
SC::Matrix<double, 3, 3> Mat();
构建程序时,所有这些都很好。但是当我运行测试程序时,我总是得到错误的结果。
当我试图找到原因时,我发现调试器总是跳过Mat
的定义;在第一个我认为它可能是因为我在构建此程序后修改了文件,因此我删除了所有构建结果(由cmake自动生成)并重建它。但它没用,问题仍然存在。
有没有人可以帮我找到原因?我是否为此问题提供了足够的信息?
答案 0 :(得分:7)
你说“......调试器总是跳过...”,所以我假设你试图创建一个SC::Matrix<double, 3, 3>
类型的变量Mat,看看它是如何默认初始化的。
如果这是真的,那么
SC::Matrix<double, 3, 3> Mat();
声明一个名为Mat
的函数,不带args并返回SC::Matrix<double, 3, 3>
。当然,你无法“调试”函数声明。
如果要创建默认的初始化变量,请写:
SC::Matrix<double, 3, 3> Mat{};
或只是
SC::Matrix<double, 3, 3> Mat;