没有可行的超载'='
no viable overloaded '='
本文关键字:超载 更新时间:2023-10-16
我现在正在学习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
部分中定义它,但看起来没有。
帮助?=|
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
。
此处:
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) {}
相关文章:
- 寻找地理和伤害意味着超载
- 没有可行的超载'='用于shared_ptr
- "专业化不参与超载"
- 虚拟超载运算符>>和<<
- 为什么我的超载"+"运算符返回的总额错误?
- C++ 超载 += 用于两个袋子的合并,返回类型为空隙
- C++11 中对超载'ref(Select::Expressions::Code&)'的调用模棱两可
- 为什么STD :: SPAN超载函数调用操作员索引
- C 操作员超载调用驱动器
- C const char *评估操作员超载
- 如何包括C 模板类的非成员运算符 - 超载
- 类型长的长度和未解决的超载函数类型的类型的操作数与二进制运算符
- 无法调用纯抽象基类超载
- 二进制超载操作员=
- 操作员超载;必须是二进制操作员(具有3个参数)
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 超载 =具有多个术语的运算符
- GLM超载操作员用于地图不起作用
- C bool表达式作为函数参数调用错误的超载
- 运算符超载的Lambda表达式