为什么调试器总是跳过这个程序中的一行?

X.S*_*ang 3 c++ gcc c++11

我正在编写一个名为的矩阵的模板类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);
}
Run Code Online (Sandbox Code Playgroud)

在我的测试文件中,我写道:

SC::Matrix<double, 3, 3> Mat();
Run Code Online (Sandbox Code Playgroud)

当我构建程序时,所有这些都很好.但是当我运行测试程序时,我总是得到错误的结果.

当我试图找到原因时,我发现调试器总是跳过定义Mat; 在第一个我认为它可能是因为我在构建此程序后修改了文件,因此我删除了所有构建结果(由cmake自动生成)并重建它.但它没用,问题仍然存在.

有没有人可以帮我找到原因?我是否为此问题提供了足够的信息?

Win*_*lds 7

你说"...调试器总是跳过...",所以我假设你试图创建一个类型的变量Mat,SC::Matrix<double, 3, 3>看看它是如何默认初始化的.

如果这是真的,那么

SC::Matrix<double, 3, 3> Mat();
Run Code Online (Sandbox Code Playgroud)

声明一个名为Mattake no args并返回的函数SC::Matrix<double, 3, 3>.当然,你无法"调试"函数声明.如果要创建默认初始化变量write:

SC::Matrix<double, 3, 3> Mat{};
Run Code Online (Sandbox Code Playgroud)

要不就

SC::Matrix<double, 3, 3> Mat;
Run Code Online (Sandbox Code Playgroud)

  • 它实际上是函数声明,而不是定义.您**可以**调试函数定义(实际上这是您主要调试的),但不是声明. (3认同)

归档时间:

查看次数:

91 次

最近记录:

8 年,5 月 前