我现在正在使用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
部分中定义它但它看起来没有。
帮助? = |
答案 0 :(得分: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
。
答案 1 :(得分:2)
下面:
Office* aid, bursar, registrar, parking;
仅aid
为Office*
,其余为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) {}