2010-04-05 96 views
2

所以,我定义的类象GDB跳过我的代码!

DataLoggingSystemStateReceiver 
{ 
DataLoggingSystemStateReceiver() 
: // initializer list 
{ 
    // stuff 
} 

// ... other functions here 

}; 

在主,我实例DataLoggingSystemStateReceiver像这样:

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"); 

是怎么回事?


编辑:通过改变

DataLoggingSystemStateReceiver dlss(); 

DataLoggingSystemStateReceiver dlss; 

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

+2

只是为了确定:您是否使用'-g'来编译您的代码? – 2010-04-05 14:59:50

+0

是的,我正在使用-g。 – 2010-04-05 15:01:11

回答

9

此:

DataLoggingSystemStateReceiver dlss(); 

不声明一个自动可变的。它声明了一个名为dlss的函数,它不接受任何参数并返回DataLoggingSystemStateReceiver

你想:

DataLoggingSystemStateReceiver dlss; 

的对象将被默认初始化,所以对你的类的类型,默认构造函数将被调用。

+0

此行为发生,因为对象的默认构造函数不带参数? – 2010-04-05 15:03:54

+7

@sheep:不。这只是语法的一个缺点,它被称为“最令人头疼的解析”。编译器只是将其作为函数的声明读取,与您的类无关。 – GManNickG 2010-04-05 15:05:30

+0

很酷。感谢您的解释! – 2010-04-05 15:14:11