2012-09-05 33 views
4

我現在正在C++模擬課程,並且在標題中引用了clang ++錯誤。我希望有人能告訴我爲什麼,因爲我似乎無法爲任何地方的類似情況找到類似的錯誤(我可能會搜索)。沒有可行的重載'='

每個Office*變量定義(行187到190)都會發生錯誤。

175 class EventHandler { 
176 
177  private: 
178  double simulation_time; // current simulation time 
179  Office* aid, bursar, registrar, parking; 
180  Event* current_event; 
181  MinHeap* time_heap; 
182 
183  public: 
184 
185  void initialize_simulation() { // initializes simulation time, offices, and event handler (time_heap) 
186   simulation_time = 0; 
187   aid = new Office(8, Tf); // initializes financial aid office with Tf tellers, with serve time exponentially distributed with mean of 8 minutes 
188   bursar = new Office(15, Tb);  // initializes bursar office w/ Tb tellers, exp distro, mean 15 min 
189   registrar = new Office(5, Tr); // registrar w/ Tr tellers, exp distro, mean 5 min 
190   parking = new Office(10,Tp);  // parking office w/ Tp tellers, exp distro, mean 10 
192   MinHeap* time_heap = new MinHeap(); 
193  } 

如果我更換Office* aid聲明(例如),並改變aid = new Office(15, Tf)Office* aid = new Office(15, Tf),錯誤消失。我不知道爲什麼,並且非常想要,因爲我希望所有這些類指針都是private

有趣(刺激?),MinHeap* time_heap; time_heap = new MinHeap();不會造成任何問題。我認爲這可能與聲明一個指針var爲private,然後在類的public部分中定義它,但它看起來不是。

有幫助嗎? = |

回答

6
Office* aid, bursar, registrar, parking; 

聲明單個指針和3個對象。你可能想您所想

Office *aid, *bursar, *registrar, *parking; 

實際上想:

std::unique_ptr<Office> aid; 
std::unique_ptr<Office> busar; 
std::unique_ptr<Office> parking; 
std::unique_ptr<Office> registrar; 

並把它們在構造函數初始化列表初始化。如果班級不是資源所有者,請使用std::shared_ptr

+0

我不確定他們是否真的需要*指針,但是如果他們這樣做,這就是做到這一點的方法! – juanchopanza

+0

@ juanchopanza你可能是對的。 –

2

這裏:

Office* aid, bursar, registrar, parking; 

aidOffice*,其餘均爲Office。看你的代碼,它看起來像你可以很容易地避免出現問題,不使用指針:

Office aid, bursar, registrar, parking; 

然後

 aid = Office(8, Tf); 
    bursar = Office(15, Tb); 
    registrar = Office(5, Tr); 
    parking = Office(10,Tp); 

此外,您initialize_simulation()似乎旨在只調用一次。你可能會更好的在構造函數中進行初始化。

EventHandler::EventHandler() 
: aid(8,Tf), bursar(15, Tb), registrar(5, Tr), parking(10, Tp) {} 
+0

rofl FML,編譯就好,如果我改變它。三個後續問題:1)...爲什麼在地球上? 2)這是因爲它是一個指針,對嗎? 3)這種事情的恰當(緊湊)語法是什麼(現在我每行都有一個新的語法)? – user1647959

+0

@ user1647959請不要在評論中發佈後續問題。問一個新的。 –

+0

erp ...對不起。好吧編輯:另外,謝謝胡安 – user1647959

相關問題