开发Qt碰到的第一个问题(when initialized here)

本文探讨了C++中构造函数初始化列表导致的警告原因,通过实例解释了成员变量的初始化顺序与声明顺序不一致可能引发的问题,并给出了具体的测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在写一个qt程序,碰到了一个warning,虽然明白怎么避免 2 但是开始不明白为什么要报这个warning 3 4 //程序抽象一下,如下 5 //test.cpp 6 #include 7 using namespace std; 8 9 class A 10 { 11 int m_a; 12 int m_b; 13 public: 14 A():m_b(0), m_a(0) {} 15 }; 16 17 18 int main() 19 { 20 return 0; 21 } 22 23 //编译 24 g++ -g -Wall -o test test.cpp 25 26 //你就会发现一个Warning 27 E:/source/test>make 28 g++ -g -Wall -o test test.cpp 29 test.cpp: In constructor `A::A()': 30 test.cpp:7: warning: `A::m_b' will be initialized after 31 test.cpp:6: warning: `int A::m_a' 32 test.cpp:9: warning: when initialized here 33 34 也就是说初始化顺序跟变量申明顺序有问题, 35 但事实上为什么会报这个warning? 36 或者说,编译器认为,m_a申明在m_b之前, 37 但是m_b比m_a先初始化,到底会带来怎样意想不到的结果 38 39 这个就要追溯到,c++的initialization list机制 40 A():m_b(0), m_a(0){} 41 这个初始化,到底是怎么实现的 42 其实c++会在这个构造函数里面加入他们的初始化代码 43 于是这个构造函数等价与 44 A() { 45 m_a = 0; 46 m_b = 0; 47 ////上面是用户不可见,c++自己生成部分 48 ..... // 这些是用户添加的代码 49 } 50 你现在已经惊奇的发现,虽然 51 A():m_b(0), m_a(0); 52 m_b的初始化在m_a前面,但是m_a确先初始化 53 理由只有一个,这个编译器自动添加代码的顺序 54 是按照类成员的申明顺序添加的!!!!!! 55 56 57 //我们写个简单的程序测试一下 58 59 #include 60 using namespace std; 61 62 class A 63 { 64 int m_a; 65 int m_b; 66 public: 67 A():m_b(-1), m_a(m_b) {} 68 void print() { cout<<"m_a = "<

当遇到"This application failed to start because no Qt platform plugin could be initialized"这个问题时,通常是在尝试运行一个基于Qt库的应用程序,但系统找不到合适的平台插件以支持图形用户界面渲染。Qt是一个跨平台的框架,需要适配特定操作系统的图形模块才能正常工作。 解决这个问题的步骤一般包括: 1. **检查安装**:确保已经正确安装了对应于你的操作系统版本的Qt库,例如Qt for Windows、Qt for macOS或Qt for Linux等。 2. **更新或安装插件**:确保你已安装了相应的平台支持模块,如Qt Quick Controls 2(对于Qt 5),或者Qt Widgets(如果是较早的Qt版本)。这通常可以在Qt安装目录下的plugins/platforms文件夹下找到。 3. **环境变量设置**:如果你使用的是Conda环境,确保`QT_PLUGIN_PATH`环境变量包含了正确的插件路径。如果没有设置,可以添加路径到该环境变量中,如`export QT_PLUGIN_PATH=/path/to/qt/plugins:/path/to/conda/env/plugins`. 4. **启动应用时指定插件**:某些应用程序允许你通过命令行选项指定使用的平台,例如`myapp -platform xcb`。 5. **重建项目**:有时候,如果是因为工程配置错误导致的,重新构建项目并清理缓存可能会解决问题。 6. **兼容性问题**:确认你的应用程序版本和Qt库版本是否匹配,有时过旧的软件可能需要更早版本的Qt。 如果你仍然无法解决问题,建议查阅Qt官方文档或者在开发者社区搜索类似的问题报告,以便找到解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值