нет соответствующей функции для вызова A :: A (MainWindow * const)

0

Я не избавляюсь от сообщения об ошибке "никакой подходящей функции для вызова 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;
 }
Теги:
user-interface
qt
constructor

4 ответа

0
Лучший ответ

Конструктор вашего класса A принимает Ui::MainWindow * и сохраняет его как члена, но ваш класс MainWindow определяется в глобальном пространстве имен, а не в Ui.

Если вы хотите использовать это пространство имен, оберните как определение класса (в заголовке), так и определения членов в namespace Ui {... }.

Если вы собираетесь использовать его в глобальном пространстве имен, удалите разрешение пространства имен Ui::.

  • 0
    Большое спасибо, это работает!
0

В файле A.cpp вы определяете конструктор с: перед его блоком содержимого, который подразумевает список инициализации, но не инициализируйте ничего. На моем компьютере (с MSVC) это приводит к синтаксической ошибке. Является ли это опечаткой в вашем скопированном коде или это может быть причиной ее отказа? Если вы используете другой компилятор, он может давать разные ошибки.

0

Вы пропустили

#include "A.h"

в mainwindow.h? Или в mainwindow.cpp при использовании прямого объявления в заголовке?

  • 0
    Я сделал #include "А" в mainwindow.h
0

Я думаю, проблема в этой строке:

track(new A(this))

где this указывает на MainWindow, а класс ожидает, что A Ui::MainWindow в конструкторе.

  • 0
    Я также пробовал MainWindow в конструкторе A, но затем я получаю сообщение об ошибке «Ожидается» до * token », но я не понимаю, почему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню