我有一个名为KernelLock的类,并且正在创建一个名为myLockArray的KernelLocks数组。我这样声明:KernelLock myLockArray[150];

当我尝试向myLockArray添加新的KernelLock时,出现上述错误。这是我得到错误的确切行:

myLockArray[initializedLocksCounter] = new KernelLock(myAddrSpace, newLock);


这是确切的错误:

error: no match for 'operator=' in 'myLockArray[initializedLocksCounter] = (((KernelLock*)operator new(8u)), (<anonymous>->KernelLock::KernelLock(myAddrSpace, newLock), <anonymous>))


如果有帮助,我将通过Nachos使用gcc进行编译。

最佳答案

KernelLock myLockArray[150];


这是一个包含150个内核锁的数组。


  当我尝试向myLockArray添加新的KernelLock时


您不能将任何对象添加到数组。数组的大小始终是恒定的。它总是有150个锁。

myLockArray[initializedLocksCounter] = new KernelLock(myAddrSpace, newLock);


错了new返回动态分配的对象的地址。您正在尝试将该地址分配给索引为KernelLock的现有initializedLocksCounter对象。您不能将地址分配给非指针对象(除非该对象具有相应的(非显式)构造函数)。

如果要增加阵列,请使用std::vector<KernelLock>

关于c++ - C++在我的自定义对象数组中不匹配'operator =',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33177041/

10-10 21:36