zxWang_stu 2025-03-26 20:49 采纳率: 14.3%
浏览 11

遇到的C语言函数重载问题

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

img

  • 写回答

5条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-26 20:49
    关注
    让【道友老李】来帮你解答,本回答参考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;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月26日