调用A :: A(MainWindow * const)没有匹配函数

时间:2014-04-07 13:03:31

标签: c++ qt user-interface constructor

我没有删除错误消息'没有匹配函数来调用A :: A(MainWindow * const)'当我尝试编译我的代码。我没有发现问题,非常感谢任何帮助!

我用qt创建了一个gui,并尝试将一个指针指向A类,以便从那里访问gui元素。我的代码如下所示:

mainwindow.h

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


private slots:

    void on_cmdStart_clicked();

    void on_cmdAbort_clicked();

...

private:

    A *track; //class A


    QImage qimgOriginal;
    QImage qimgDataBase;
    QTimer* tmrTimer;



//    void run();

};
在mainwindow.cpp中

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)  ,
    track(new A(this))
{
    ui->setupUi(this);



}

...

A.h

中的

namespace Ui {
class MainWindow;
}                        //without this I receive error: "expected ) before * token"

class A : B/*, public QWidget*/  {

 public:                    

    A(Ui::MainWindow *);
    ~A();
    Ui::MainWindow *GUI;

在A.cpp中

#include "A.h"

//i+1 iteration

 A::A(Ui::MainWindow * mainwin) : 
 {
    GUI = mainwin;
 }

4 个答案:

答案 0 :(得分:0)

我认为问题出现在这个字符串中:

track(new A(this))

其中this指向MainWindow,而A类指的是构造函数中的Ui::MainWindow

答案 1 :(得分:0)

你错过了

#include "A.h"
mainwindow.h中的

?或者在标题中使用前向声明时在mainwindow.cpp中?

答案 2 :(得分:0)

A类的构造函数接受Ui::MainWindow *并将其存储为成员,但您的MainWindow类在全局命名空间中定义,而不是在Ui中定义。

如果您希望它在该命名空间中,请包含类定义(在标题中)和namespace Ui { ... }块中的成员定义。

如果您打算在全局命名空间中使用它,请删除命名空间解析Ui::

答案 3 :(得分:0)

在A.cpp文件中,您可以在其内容块之前定义一个带有:的构造函数,这意味着初始化列表,但不要初始化任何内容。在我的计算机上(使用MSVC),这会产生语法错误。 这是您复制的代码中的拼写错误还是它失败的原因?如果您使用的是其他编译器,则可能会出现不同的错误。