构造函数无法重新声明。为什么?

时间:2019-12-29 14:57:47

标签: c++ qt constructor compiler-errors

我在Qt C ++程序中遇到此问题,并说“无法重新声明构造函数”。我该如何解决?

class MagicTransaction : public QObject
{
  Q_OBJECT
public:
  explicit MagicTransaction ( QObject* parent = 0 );
private slots:
  void start ( );
  MagicTransaction( QObject* parent );
};

4 个答案:

答案 0 :(得分:2)

您在MagicTransaction构造函数中有两个声明,它们带有一个QObject*参数-一个在public部分中,一个在private部分中(请注意,默认值并且explicit修饰符不参与名称修改)。只需删除一个就可以了:

class MagicTransaction : public QObject
{
  Q_OBJECT
public:
  explicit MagicTransaction ( QObject* parent = 0 );
private slots:
  void start ( );
  // second definition removed here
};

答案 1 :(得分:1)

非常简单-您在不同的部分中两次声明了相同的构造函数:

class MagicTransaction : public QObject
{
  Q_OBJECT
public:
  explicit MagicTransaction ( QObject* parent = 0 );
private slots:
  void start ( );
  MagicTransaction( QObject* parent ); // <---- remove this
};

删除第二个声明

答案 2 :(得分:1)

您有构造函数

explicit MagicTransaction ( QObject* parent = 0 );

然后您拥有的功能是

MagicTransaction( QObject* parent );

插槽是函数,因此您有两个相同的函数,其中一个是构造函数,另一个是-而不是。重命名第二个,您会很方便。

答案 3 :(得分:1)

从没看到过在Qt中用作插槽的构造函数,这看起来很奇怪。

在完全构造对象之后,插槽仅被称为。我很确定C ++禁止多次构造同一对象。

如果您想要一个可以以某种方式接受父指针的插槽(我不确定您是否要更改Qt层次结构中对象的所有权,这似乎也不寻常,但是我认为这是可能的),则需要使用其他名称,例如:

void ChangeMyOwner(QObject *parent);