1
是否有不同的方式來創建QObject的動態數組?下面的代碼不會編譯:Qt QObject動態數組
QStringList labels = defaultScene->getLabels();
QAction* traceActions = new QAction[labels.size()];
的錯誤是:
C2512:「的QAction」:沒有可用的適當的默認構造函數
是否有不同的方式來創建QObject的動態數組?下面的代碼不會編譯:Qt QObject動態數組
QStringList labels = defaultScene->getLabels();
QAction* traceActions = new QAction[labels.size()];
的錯誤是:
C2512:「的QAction」:沒有可用的適當的默認構造函數
你看到這一點,因爲的QAction沒有默認構造函數。
你可以創建一個指向QAction的指針數組,然後在它自己的實例化每個QAction。
事情大致是這樣:
QAction** actions = new (QAction*)[labels.size()];
for(size_t i = 0; i<labels.size(); ++i)
{
actions[i] = new QAction(constructor params ...);
}
謝謝。這將工作正常。 – ChaoSXDemon
@ChaoSXDemon:你在一個現在被刪除的答案的評論中問道,*「在使用[QValueVector]而不是簡單的東西方面有特別的優勢嗎?」 - 請記住,你必須確保你調用delete在所有這些指針中,以及這個答案中的代碼不是異常安全的事實,您是否清楚地看到使用像QValueVector這樣的容器的優點?例外安全,內存泄漏的風險很小或沒有風險,代碼不難看。這些對我來說似乎有很大的優勢。 –
@BenjaminLindley:我個人更喜歡使用標準庫等價物來提供異常安全和生命期控制。 std :: vector應該這樣做。 –