代码之家  ›  专栏  ›  技术社区  ›  J. Polfer

GDB跳过了我的代码!

  •  2
  • J. Polfer  · 技术社区  · 14 年前

    所以,我定义了一个类

    DataLoggingSystemStateReceiver
    {
    DataLoggingSystemStateReceiver()
    :   // initializer list
    {
        // stuff
    }
    
    //  ... other functions here
    
    };
    

    在main中,我实例化dataloggingsystemstateceiver,如下所示:

    int main()
    {
        // ... run stuff
        Sensor sensor(port, timer);
    
        DataLoggingSystemStateReceiver dlss();
    
        Log::notice("started");
        return 0;
    }
    

    但是,当我在gdb中单步执行此代码时,它会运行:

    Sensor sensor(port, timer);
    

    箕斗

    DataLoggingSystemStateReceiver dlss();
    

    然后继续

    Log::notice("started");
    

    给出了什么?


    编辑: 通过改变

    数据记录系统状态接收器dlss();
    

    DataLoggingSystemStateReceiver dlss;
    

    在main()中,执行该行。有人能解释为什么吗?

    1 回复  |  直到 14 年前
        1
  •  9
  •   James McNellis    14 年前

    这是:

    DataLoggingSystemStateReceiver dlss();
    

    不声明自动变量。它声明一个名为 dlss 不需要参数并返回 DataLoggingSystemStateReceiver .

    你想要:

    DataLoggingSystemStateReceiver dlss;
    

    对象将被默认初始化,因此对于您的类类型,将调用默认构造函数。