我正在做一個專案,我必須將任務分配給時間表。時間表分為三類:Semaine、Journee和Mission。每個類都包含較低級別的元素串列。這是每個類的定義:
class Mission{}
class Journee{
list<Mission> missions;
bool addMission(Mission& m);
}
class Semaine{
list<Journee> jours;
bool addMission(Mission& m);
}
我想使用Semaine::addMission()將任務添加到串列的元素中。但是,當我嘗試這樣做時,添加的元素不會出現,而當我使用Journee::addMission()時會出現。下面是每個addMission()函式的代碼:
bool Semaine::addMission(Mission& m){
if(!isInWeek(m.date)) return false;
for(Journee j : jours){
if(j.addMission(m)){
initMemory(); // not important here
return true;
}
return false;
}
bool Journee::addMission(Mission& m){
if(m.date==date){
missions.push_back(m);
missions.sort();
initMemory(); // same
return true;
}
return false;
}
// Alternative tries : change return types to Journee/Semaine and Journee&/Semaine&
每次從主檔案呼叫這些函式:
Semaine s = Semaine();
for(Mission m : missions) s.addMission(m);
cout << s; // Printed as if no mission was added
Semaine j = Journee();
for(Mission m : missions) j.addMission(m);
cout << j; // Printed with added missions
我知道當復制建構式丟失或損壞時會出現這種問題,所以我為每個類實作了一個,這里它們是(使用 = 運算子復制的標準型別的屬性):
Mission(const Mission& m){}
Semaine::Semaine(const Semaine& s){jours = list<Journee>(s.jours);}
Journee::Journee(const Journee& j){missions = list<Mission>(j.missions);}
//Alternative tries : std::copy, list::insert
使用的建構式:
Journee::Journee(){missions = list<Mission>();}
Semaine::Semaine(){Semaine(1);}
Semaine::Semaine(int dateLundi){
this->dateLundi = dateLundi;
jours = list<Journee>();
for(int i = 0; i < 7; i ){
jours.push_back(Journee(dateLundi i));
}
}
你知道為什么它不作業/如何解決它嗎?
uj5u.com熱心網友回復:
我認為問題出在
for(Journee j : jours){
這為您提供了Journee.
改為使用參考,即
for(Journee& j : jours){
應該解決問題
同樣對于
for(Mission m : missions) s.addMission(m);
那應該是:
for(Mission& m : missions) s.addMission(m);
甚至更好:
for(auto& m : missions) s.addMission(m);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486140.html
