Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ variable or field '...' declared void

Автор: void* 26.6.2008, 9:51

вобщем есть у меня класс, в нем слот:

public slots:
                void createNewProject(CPDialog::ProjectType type, const QString &dir, const QString &name);

вот его реализация:
void MainWindow::createNewProject(CPDialog::ProjectType type, const QString &dir, const QString &name) {
     switch(type) {
                  case CPDialog::Console_Application:
                       createConsoleApp(dir, name);
                       break;
                  case CPDialog::Linux_Application:
                       createLinuxApp(dir, name);
                       break;
                  case CPDialog::Windows_Application:
                       createWindowsApp(dir, name);
                       break;
                  case CPDialog::MacOS_Application:
                       createMacOSApp(dir, name);
                       break;
                  }
}

вот тут он соединяется с сигналом:
void MainWindow::newProject() { 
     CPDialog *dialog = new CPDialog;
     connect(dialog, SIGNAL(needCreateProject(CPDialog::ProjectType, const QString&, const QString&)),
     this, SLOT(createNewProject(CPDialog::ProjectType, const QString&, const QString&)));
     dialog->exec();
     //...
}


при компиляции выскакивают ошибки:
error: variable or field 'createNewProject' declared void //это он ругается на определение в хидере
error: expected ';' before '(' token //это он ругается на определение в хидере
error: no 'void MainWindow::createNewProject(CPDialog::ProjectType, const QString&, const QString&)' member function declared in class 'MainWindow' //а это уже ругань на реализацию метода

подскажите пожалуйста в чем ошибка? ниче не понимаю...

Автор: ViGOur 26.6.2008, 9:55

Приведи этот класс полностью...

Автор: AD 26.6.2008, 9:57

По приведенному коду сложно сказать. Вроде все правильно. А у тебя есть наследование от класса QObject, и есть макрос Q_OBJECT?

Автор: void* 26.6.2008, 10:03

наследуюсь от QMainWindow, Q_OBJECT естественно есть
вот определения(весь класс довольно громоздкий):

#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_
#include <QMainWindow>
class TabWidget;
class QTabWidget;
class ProjectView;
class CPDialog;
//...
class MainWindow : public QMainWindow {
    Q_OBJECT
//...
};
#endif

Автор: Tonal 26.6.2008, 10:10

CPDialog только задекларирован, но не определён. А ты в декларации createNewProject используешь его внутренний тип CPDialog::ProjectType.

Автор: Litkevich Yuriy 26.6.2008, 10:12

Tonal, т.е. ему надо поменять:
class CPDialog;
на:
#include "CPDialog"

так?

Автор: void* 26.6.2008, 10:14

действительно, Tonal, спасибо большое тебе, помогло

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)