2016-05-31 122 views
0

這是我在這個網站上的第一個問題,但我會盡力涵蓋所需的一切。如果我忘記了一些事,道歉。我遇到了使用QT Creator的問題,但我想這與使用Visual Studio或一般的C++是一樣的。將對象添加到矢量

我有幾個類:Mainwindow,Track和AddForm。主窗口就是它所稱的。主要形式。 Track是一個基於QObject的自定義類,它只包含一個QString變量(就目前而言,因爲我仍在試驗QT)。 AddForm是另一種形式的類,可以通過單擊我的MainWindow窗體中的按鈕來創建。該表單只包含一個單行的編輯來填充字符串和一個說「添加」的按鈕。只要按下該按鈕,行編輯中的文本就會被放入Track類的QString變量中。該QString變量被稱爲「藝術家」。

除了將行編輯的文本分配給Track對象的變量「藝術家」之外,表單還會發出一個發送整個對象的信號。我的主窗口中的插槽將對該信號作出反應並收集Track對象。到現在爲止還挺好。

這是我的問題。在我的mainwindow頭文件中,我創建了一個名爲trackVector的私有QVector,然後我可以在我的mainwindow.cpp中調用它。我想要做的是將QVector與該Track對象附加/ push_back。的排序是這樣的:

trackVector.push_back(trackObject); 

構建應用程序時,我得到了以下錯誤消息: click here for a screenshot

現在ofcourse一個整數或任何其他變量,這是非常簡單的。你只想做這樣的事,我想:

QVector<int> myVector; 
myVector.push_back(3); 

我認爲,只要你追加一個QVector(或標準的非QT矢量),你需要與類的構造函數這樣做。但我怎樣才能建立一個構造函數,在其中你可以放一個已經存在的對象?

請用盡可能簡單的單詞解釋,因爲我不是英語母語的人:)先謝謝了!

+0

錯誤表示當向量是「Track」*對象*(不是指針)的向量時,您嘗試將*指針*推送到「Track」對象。 –

+0

謝謝!所以你認爲只要它不是指針就可以工作。你知道如何讓它成爲一個非指針嗎? – MartijnKor

+0

要麼不傳遞指向'trackAdded'函數的指針,要麼取消引用指針。 –

回答

1

你已經發布了不足的代碼(所以你的帖子可能會被關閉爲脫離主題 - 這是一個經典的初學者錯誤),但我想這裏適當的解決方案是使用一些自動指針類型。如果您TrackVector是保持Track對象的所有權,那麼最好的解決辦法是有std::unique_ptr<Track>元素:

std::vector<std::unique_ptr<Track>> TrackVector; 
// filled like 
TrackVector.emplace_back(new Track(args)); 

如果,另一方面所有權在於別的地方,可以選擇使用std::shared_ptr甚至原始指針(提供你的佈局保證指向Track對象的生命期超過了TrackVector)。