C++与自定义对象数组中的'operator='不匹配
C++ no match for 'operator=' in my custom object array
我有一个名为KernelLock的类,我正在创建一个名为myLockArray的KernelLocks数组。我这样声明:KernelLock myLockArray[150];
当我尝试将新的内核锁添加到myLockArray时,我收到上述错误。这是我收到错误的确切行:
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 KernelLock
秒的数组。 然后,尝试为其分配KernelLock *
。 如果你想要指针,那么你需要将数组更改为:
KernelLock* myLockArray[150];
如果您不想要指针,则只需将作业更改为
myLockArray[initializedLocksCounter] = KernelLock(myAddrSpace, newLock);
KernelLock myLockArray[150];
这是一个包含 150 个内核锁的数组。
当我尝试将新的内核锁添加到 myLockArray 时
不能向数组中添加任何对象。数组的大小始终是恒定的。它总是有 150 个锁。
myLockArray[initializedLocksCounter] = new KernelLock(myAddrSpace, newLock);
这是错误的。 new
返回动态分配对象的地址。您正在尝试将该地址分配给索引initializedLocksCounter
处的现有KernelLock
对象。不能为非指针对象分配地址(除非该对象具有相应的(非显式(构造函数(。
如果您想要一个不断增长的阵列,请使用std::vector<KernelLock>
你从根本上误解了C++中的对象是什么。这不像在Java中。
您的 150 个KernelLock
对象是 150 个KernelLock
对象。不是指针,也不是引用。其中有150个。您不能随时动态"扩展"数组,而使用 new
这样做是动态分配,需要管理指针 (KernelLock*
(。
从它的声音来看,你实际上想要一个std::vector<KernelLock>
.
以下是一些学习C++基础知识的资源。
不能将类型为 KernelLock*
的值用作 KernelLock
数组的元素。您只需执行以下操作:
myLockArray[i] = KernelLock(myAddrSpace, newLock);
其中i
是有效索引。
但是,请注意,通过这样做,无论如何,您都将付出默认初始化150
KernelLock
的代价(这可能很昂贵(。最好使用标准库:
std::vector<KernelLock> kernel_locks;
kernel_locks.reserve(some_size); // better to reserve if you have some sensible upper bound
kernel_locks.emplace_back(myAddrSpace, newLock);
- 与'operator='不匹配(操作数类型'String'且"void")
- Valarray 切片数组与 'operator*' 不匹配
- 错误:'operator>'不匹配(操作数类型为 'Student' 和 'Student'
- 与'operator<<'不匹配(操作数类型'std::ostream {aka std::basic_ostream<char>}'
- 与"operator<<"不匹配(操作数类型'std::ostream'
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 使用标准::时间::high_resolution_clock时"operator ="不匹配
- 错误:与'operator='不匹配(操作数类型为 'PlDrustvo' 和"PlDrustvo")|
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 错误:尝试减去字符串时'operator-'不匹配
- 调用模板方法会导致'operator<'不匹配
- \main.cpp|103|error: 与"operator<<"不匹配(操作数类型为"std::ostream {aka std::basic_ostream<char&g
- 使用 #omp 时'operator -'不匹配
- 尝试使用 fstream 将字符写入文件:'operator<<'不匹配
- C++ 将文件读取到数组错误:'operator>>'不匹配
- 有没有办法修复此错误:与'operator[]'不匹配(操作数类型为 'empl' 和"int")
- 错误与'operator='不匹配(操作数类型为 'Person' 和"Person*")
- 我得到"将值分配给结构数组 iin 时与'operator='不匹配C++
- 在地图中搜索值时'operator='不匹配
- 错误:'operator<<'和"运算符>>"不匹配。请帮忙?