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);
}
相关推荐
551只玄猫36 分钟前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
念恒123062 小时前
继承(下) (Inheritance)
c++
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey3 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
一定要AK7 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao7 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢7 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong7 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
KevinCyao7 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024067 小时前
C 标准库 - `<stdio.h>`
开发语言