在遍历一个对象向量时,如果对象的复制构造函数已被删除(C2280),可以通过以下两种解决方法来处理:
解决方法一:使用引用而不是对象进行遍历
#include
#include
class MyClass {
public:
MyClass(int value) : m_value(value) {}
MyClass(const MyClass&) = delete; // 删除复制构造函数
int getValue() const { return m_value; }
private:
int m_value;
};
int main() {
std::vector vec;
vec.emplace_back(1);
vec.emplace_back(2);
vec.emplace_back(3);
// 遍历对象向量,使用引用而不是对象
for (const auto& obj : vec) {
std::cout << obj.getValue() << std::endl;
}
return 0;
}
解决方法二:使用指针而不是对象进行遍历
#include
#include
class MyClass {
public:
MyClass(int value) : m_value(value) {}
MyClass(const MyClass&) = delete; // 删除复制构造函数
int getValue() const { return m_value; }
private:
int m_value;
};
int main() {
std::vector vec;
vec.emplace_back(1);
vec.emplace_back(2);
vec.emplace_back(3);
// 遍历对象向量,使用指针而不是对象
for (const auto& obj : vec) {
const MyClass* ptr = &obj;
std::cout << ptr->getValue() << std::endl;
}
return 0;
}
以上两种方法都可以解决遍历对象向量时对象的复制构造函数已被删除(C2280)的问题。