нет жизнеспособных перегруженных ‘=’

Я сейчас прохожу курс симуляции на 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 часть класса, но, похоже, нет.

Помогите? = |

4

Решение

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,

6

Другие решения

Вот:

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) {}
2