如图,我对结构体EventLoop结构体创建两种方式进行结构体初始化,这两种方式为什么会显示函数重载的错误呢,明明函数名称和变量都不一样

如图,我对结构体EventLoop结构体创建两种方式进行结构体初始化,这两种方式为什么会显示函数重载的错误呢,明明函数名称和变量都不一样

关注让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!在C++中,结构体的构造函数有默认的拷贝构造函数,当我们自定义了一个结构体的构造函数后,编译器就不再提供默认的拷贝构造函数。在这种情况下,如果我们使用像`EventLoop loop1 = EventLoop();`这样的方式初始化结构体对象,编译器会去寻找默认的拷贝构造函数,但是却找不到,从而导致函数重载的错误。 为了避免这个问题,我们可以显式地提供一个拷贝构造函数或者改为使用`EventLoop loop1{};`这样的方式来初始化结构体对象。以下是一个可能的实现代码示例:
#include <iostream>
struct EventLoop {
int id;
EventLoop() : id(0) {} // 默认构造函数
EventLoop(int _id) : id(_id) {} // 自定义构造函数
EventLoop(const EventLoop& other) : id(other.id) {} // 拷贝构造函数
};
int main() {
EventLoop loop1 = EventLoop(); // 编译会报错
EventLoop loop2{};
EventLoop loop3(123);
std::cout << loop2.id << std::endl; // 0
std::cout << loop3.id << std::endl; // 123
return 0;
}