Я не избавляюсь от сообщения об ошибке "никакой подходящей функции для вызова A :: A (MainWindow * const)", когда я пытаюсь скомпилировать свой код. Я не нахожу проблему и очень ценю любую помощь!
Я создал gui с qt и попытаюсь дать указатель на класс 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);
}
...
в Ах
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;
}
Конструктор вашего класса A
принимает Ui::MainWindow *
и сохраняет его как члена, но ваш класс MainWindow
определяется в глобальном пространстве имен, а не в Ui
.
Если вы хотите использовать это пространство имен, оберните как определение класса (в заголовке), так и определения членов в namespace Ui {... }
.
Если вы собираетесь использовать его в глобальном пространстве имен, удалите разрешение пространства имен Ui::
.
В файле A.cpp вы определяете конструктор с: перед его блоком содержимого, который подразумевает список инициализации, но не инициализируйте ничего. На моем компьютере (с MSVC) это приводит к синтаксической ошибке. Является ли это опечаткой в вашем скопированном коде или это может быть причиной ее отказа? Если вы используете другой компилятор, он может давать разные ошибки.
Вы пропустили
#include "A.h"
в mainwindow.h
? Или в mainwindow.cpp
при использовании прямого объявления в заголовке?
Я думаю, проблема в этой строке:
track(new A(this))
где this
указывает на MainWindow
, а класс ожидает, что A
Ui::MainWindow
в конструкторе.