学习编写UI代码时遭遇UIElement类相关编译错误求助
兄弟,我看你学写UI代码的时候碰到这一堆编译错误了,这几个错其实都是围绕UIElement类的定义或者用法出的问题,咱们一个个拆开捋清楚:
E0493构造函数参数不匹配
这个错是说你调用UIElement的构造函数时,传的参数类型/数量,和类里定义的所有重载构造函数都对不上。比如你传了uint16_t类型的参数,但UIElement类里根本没声明带这个参数的构造函数,或者参数类型不匹配(比如人家要的是uint32_t或者自定义枚举)。你可以先去UIElement的头文件里看看构造函数的声明,再核对你调用时传的参数,要么改参数要么补对应的构造函数重载。E0757把成员变量当成类型使用
编译器说UIElement::UIState不是一个类型,意思是你在代码里把它当类型来用了(比如写了UIElement::UIState myState;),但实际上UIState是UIElement类里的一个普通成员变量,不是嵌套的类型(比如枚举、结构体这种)。你得先搞清楚UIState到底应该是什么:如果它是类型,那你要在UIElement类里把它定义成嵌套枚举/结构体;如果它就是成员变量,那你不能把它当类型用,得改代码里的用法。C2061找不到UIState类型
这个和上一个错误是连锁反应,编译器根本识别不了UIState这个类型。要么是你没包含定义UIState的头文件,要么是UIState的定义位置不对(比如在UIElement类外面但你没正确引用),再不然就是你把成员变量当成类型用了,编译器自然找不到这个“类型”。C2511构造函数重载未在类中声明
这个是说你在类的实现文件(比如.cpp)里定义了一个带uint16_t参数的UIElement构造函数,但在UIElement的类声明(头文件里的class部分)里根本没提前声明这个重载版本。C++要求类的成员函数必须先在类里声明,才能在外面实现。你得先在头文件的UIElement类里加上UIElement(uint16_t);的声明,再去cpp文件里写实现。
给你几个快速排查的小建议:
- 先把
UIElement的头文件翻一遍,确认构造函数的所有重载都声明了,UIState的定义(如果是类型的话)也在类里正确写了 - 核对所有调用
UIElement构造函数的代码,参数类型、数量要和声明完全匹配 - 搞清楚
UIState的本质是类型还是成员变量,代码用法要和它的定义对应上
内容来源于stack exchange

