我没有删除错误消息'没有匹配函数来调用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 中的
在A.cpp中 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;
#include "A.h"
//i+1 iteration
A::A(Ui::MainWindow * mainwin) :
{
GUI = mainwin;
}
答案 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),这会产生语法错误。 这是您复制的代码中的拼写错误还是它失败的原因?如果您使用的是其他编译器,则可能会出现不同的错误。