C++ 类成员变量声明语法错误

类成员变量声明语法错误

一个禁止了默认构造函数,只有一个带参构造函数的一个类,那么才其他类中使用该类的对象时使用化,需要注意:

C++11 前,类内初始化只允许 = value 语法;

C++11 后引入 花括号初始化圆括号初始化 ,但圆括号 在某些场景下会与函数声明 产生歧义,因此在类成员初始化中推荐使用花括号 {}

在qt5.11中就遇到了如下的错误

错误使用:

cpp 复制代码
struct SyncQueue {
public:
    SyncQueue(size_t capacity) : capacity(capacity), abort_flag(false) {}
    SyncQueue() = delete;
    SyncQueue(const SyncQueue<T>&) = delete;
    SyncQueue& operator=(const SyncQueue<T>&) = delete;
    ~SyncQueue() {}
	/*
		若干待实现的函数
	*/

}

class SomeClass {
    // ❌ 非法语法:看起来像函数调用,但在这里不允许
    SyncQueue<int> sq(1000);
};

解决方法:

法一:

cpp 复制代码
class MainWindow : public QMainWindow {
    // ...
private:
    Ui::MainWindow *ui;
    SyncQueue<int> sq{1000};  // ✅ 使用花括号
};

法二:

.h源文件中声明

cpp 复制代码
class MainWindow : public QMainWindow {
    // ...
private:
    Ui::MainWindow *ui;
    SyncQueue<int> sq;  // ✅ 仅声明
};

.cpp中初始化

cpp 复制代码
MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent)
    , sq(1000)  // ✅ 在初始化列表中构造
{
    ui->setupUi(this);
}
相关推荐
Ivanqhz28 分钟前
SVD++算法
java·服务器·网络·深度学习·神经网络
qq_2518364571 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong2 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源
曹牧2 小时前
Java集合框架:List、ArrayList、Map 和 HashMap
java
顾城猿2 小时前
STOMP 协议
java
郑州光合科技余经理2 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手2 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_199886873 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
需要8263 小时前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat