gpt4 book ai didi

c++ - 没有可行的重载 '='

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:26 25 4
gpt4 key购买 nike

我现在正在参加 C++ 模拟类(class),我收到标题中引用的 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

关于c++ - 没有可行的重载 '=',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com