這是C和C++之間邊界層上的一行函數。該函數獲得一堆void*
並將它們轉換爲它們應該的類型。發現錯誤:爲什麼我能夠默認構造一個沒有默認構造函數的對象?
MDLPeriph periph_dline = *static_cast<MDLPeriph*>(dline_periph);
確實,periph_dline應該是一個參考。令我感到困惑的是這段代碼編譯時沒有警告。此外,檢查此代碼時,gdb
報告Internal GDB error.
並崩潰。
據我所知,上面的代碼默認構造一個MDLPeriph對象。然後是使用新對象的拷貝構造函數從右側分配值。
但MDLPeriph沒有默認的構造函數!這怎麼可能?
平臺和工具:
Windown 7
yagarto的此版本使用以下版本:的binutils:2.23.1 GCC:4.7.2 newlib:1.20.0 GDB:7.5。 1
(2012年12月22日,MIFI)OpenOCD的o.7.0
這是一個直接複製結構。沒有默認的建設。 @Andreas不,類可以沒有默認的構造函數。只有當類沒有任何用戶聲明的構造函數時,才默認構造函數被隱式聲明。 – 2014-09-25 13:40:09
@Andreas:不,一個類不一定有默認的構造函數。例如查看您鏈接到的問題的答案。 – sth 2014-09-25 13:42:20
哦,該死的,是的,錯過了當有**任何其他構造函數可用時,將不會生成默認構造函數...... – 2014-09-25 13:44:53