2010-04-05 134 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