使用 Qt 在 C++ 中委派 class 构造函数
Delegating class constructors in C++ using Qt
我尝试使用 C++ 在 Qt 5.4.0 中委托一个 class 构造函数。有问题的代码如下所示:
//.h
class A : public QObject
{
public:
A(QObject *parent = 0) : A(10, parent) {}; <--COMPILER ERROR
A(int x, QObject *parent = 0);
...
};
//.cpp
A::A(int x, QObject *parent) : QObject(parent)
{
do_something();
}
编译器声称元素初始化'A'既不是Basis也不是Element。这个不支持吗?如果是这样,是什么导致了这个错误?
构造函数委托是一项 C++11 功能,尚未被所有编译器支持。如果您使用 Visual Studio 编译器(或旧的 GCC),它很可能不起作用。
参见这个问题的例子,答案表明它在 VS2012 中甚至没有完全支持:Is there a way to use delegating constructors in Visual Studio 2012?
作为参考,您可以在此处找到各个 MSVC 版本支持的所有功能(在 MSVC11 上提到不支持委派构造函数):https://msdn.microsoft.com/en-us/library/hh567368.aspx
我尝试使用 C++ 在 Qt 5.4.0 中委托一个 class 构造函数。有问题的代码如下所示:
//.h
class A : public QObject
{
public:
A(QObject *parent = 0) : A(10, parent) {}; <--COMPILER ERROR
A(int x, QObject *parent = 0);
...
};
//.cpp
A::A(int x, QObject *parent) : QObject(parent)
{
do_something();
}
编译器声称元素初始化'A'既不是Basis也不是Element。这个不支持吗?如果是这样,是什么导致了这个错误?
构造函数委托是一项 C++11 功能,尚未被所有编译器支持。如果您使用 Visual Studio 编译器(或旧的 GCC),它很可能不起作用。
参见这个问题的例子,答案表明它在 VS2012 中甚至没有完全支持:Is there a way to use delegating constructors in Visual Studio 2012?
作为参考,您可以在此处找到各个 MSVC 版本支持的所有功能(在 MSVC11 上提到不支持委派构造函数):https://msdn.microsoft.com/en-us/library/hh567368.aspx