請跟我聯繫,這是我第一次發佈。我有3個班。班級供應商有一套班級家長。類父級具有類位置的向量,類位置具有數據記憶器。 EX(這是僞代碼,不是我實際的代碼我只顯示此爲簡單起見):如何將C++中的類實例推回到vector上
Class Suppliers{
set<Parent> setter;
};
Class Parent{
vector<location> loc;
};
`
以下是我創建的位置類的構造函數。我碰到沒有問題,直到我用迭代器擊中兩條線。我正試圖找到一個特定的Parent,並將一個新位置推回到Parent'loc'向量中。所以我傳入我以前找到的迭代器作爲參考。但只要我試圖推回我的位置類的新實例,我會收到以下錯誤。
data.cpp:139:33:error:將'const std :: vector'作爲'void'參數傳遞給'void std :: vector < _Tp,_Alloc> :: push_back(const value_type &)[with _Tp =地點; _Alloc = std :: allocator; std :: vector < _Tp,_Alloc> :: value_type = location]'丟棄限定符[-fpermissive]
最後一行還給出了一個錯誤,說我不能改變一個只讀對象。我很困惑,爲什麼這將是一個只讀對象。我做了一些研究,並認爲我需要添加一個拷貝構造函數。但是,這導致了比解決問題更多的問題。有任何想法嗎?
location::location(set<Parent>::iterator &it, vector<string> v){
sup_id = v[0];
address1 = v[2];
address2 = v[3];
city = v[4];
state = v[5];
country = v[6];
zip = v[7];
((*it).loc).push_back(*this);
((*it).num)++;
}
除了@Daniel Frey的回答,你的代碼設計非常差,因爲在它自己的構造過程中,你不應該傳遞實例的指針**。 –
@Alexandre Severino,當我初始化對象並創建一個指向對象的指針並將其推回(在構造函數之外)時,你會建議嗎? – Katie
你有沒有考慮過使用**工廠模式**?你可以創建一個'static'方法,爲它自己的類調用'private constructor',當它被正確實例化時,添加到列表中。所有在這個靜態方法。 更多信息:http://www.codeproject.com/Articles/363338/Factory-Pattern-in-Cplusplus –