我在Qt C ++程序中遇到此问题,并说“无法重新声明构造函数”。我该如何解决?
class MagicTransaction : public QObject
{
Q_OBJECT
public:
explicit MagicTransaction ( QObject* parent = 0 );
private slots:
void start ( );
MagicTransaction( QObject* parent );
};
答案 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);