类成员变量声明语法错误
一个禁止了默认构造函数,只有一个带参构造函数的一个类,那么才其他类中使用该类的对象时使用化,需要注意:
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);
}