2016-04-29 4 views
2

Прежде всего, я видел некоторые решения, но я их не понимал. Я новичок в QT, и даже Google не помог мне. Английский не мой первый языкC2143: синтаксическая ошибка: отсутствует ';' перед '*' & C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает default-int

Это сообщение об ошибке после отладки в QT Creator 5,6

C2143: syntax error: missing ';' before '*'

C4430: missing type specifier - int assumed. Note: C++ does not support default-int

C2238: unexpected token(s) preceding ';'

Вот файл

secdialog.h

#ifndef SECDIALOG_H 
#define SECDIALOG_H 

#include <QDialog> 
#include "tridialog.h" 
#include "quadialog.h" 

namespace Ui { 
class SecDialog; 
} 

class SecDialog : public QDialog 
{ 
    Q_OBJECT 

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

private slots: 
    void on_pushButton_5_clicked(); 

    void on_status_clicked(); 

    void on_pushButton_2_clicked(); 

    void on_zuteilung_clicked(); 

private: 
    Ui::SecDialog *ui; 

    TriDialog *triDialog; //this is the line with the problem 

    QuaDialog *quaDialog; // funny thing, he didn't complain about this line 

}; 

#endif // SECDIALOG_H 

К сожалению, если проблема был уже здесь, в вопросах, но я не понял других решений.

Я пытаюсь сделать небольшую программу только для показа, ей нужно показать только некоторые формы, и это все. Есть несколько кнопок, и каждая кнопка открывает другую форму и прячет ее раньше.

Моя проблема в том, что у меня всегда есть проблемы с программированием и языками, часто я не знаю достаточно, чтобы понять решение, я больше «кто-то показывает мне, как и затем я его использую и понимаю» - я узнаю через «скопирующую пасту»

Может ли кто-нибудь сказать мне, что я сделал не так? Если вам нужна дополнительная информация о проекте, просто спросите.

Заранее спасибо.

Здесь запрашиваемый tridialog.h

#ifndef TRIDIALOG_H 
#define TRIDIALOG_H 

#include <QDialog> 
#include "secdialog.h" 


namespace Ui { 
class TriDialog; 
} 

class TriDialog : public QDialog 
{ 
    Q_OBJECT 

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

private slots: 
    void on_pushButton_5_clicked(); 

private: 
    Ui::TriDialog *ui; 
    TriDialog *triDialog; 
}; 

#endif // TRIDIALOG_H 

Здесь весь проект кварт kraftwerk.zip

+0

Как выглядит '' tridialog.h "'? – Barry

+0

отредактировал сообщение ... tridialog.h сейчас нет – Tareen

+0

@barry Это законный? 'Явный TriDialog (QWidget * parent = 0);' –

ответ

3

Ваша проблема заключается в tridialog.h:

#include "secdialog.h" 

Когда вы включаете secdialog.h, вы принесете в вашем объявлении класса SecDialog, который имеет указатель TriDialog (на проблемном лине e) перед объявлением класса TriDialog!

Поскольку вы на самом деле не нужно ничего от secdialog.h в tridialog.h, просто удалите

#include "secdialog.h" 

и он должен работать.

+1

Хороший улов. Это похоже на проблему, которую искала Тарин. –

+0

Когда я удаляю #include следующий код ошибки, приходит – Tareen

+0

moc_secdialog.obj: -1: Fehler: LNK2019: неразрешенный внешний символ "private: void __cdecl SecDialog :: on_pushButton_2_clicked (void)" (? On_pushButton_2_clicked @ SecDialog @@ AEAAXXZ), на который ссылается функция "private: static void __cdecl SecDialog :: qt_static_metacall (класс QObject *, перечисление QMetaObject :: Call, int, void * *)" (? qt_static_metacall @ SecDialog @@ CAXPEAVQObject @@ W4Call @ QMetaObject @@ HPEAPEAX @ Z) – Tareen

1

Похоже, вы ошиблись, если я не понимаю ваше намерение. Этот код:

namespace Ui { 
    class TriDialog; 
} 

class TriDialog : public QDialog 
{}; 

объявляет класс с именем TriDialog в пространстве имен Ui, а затем объявляет класс с именем TriDialog вне пространства имен Ui. Теперь у вас есть два класса: Ui::TriDialog и TriDialog. Вы должны поместить все определение в область пространства имен.

Редактировать: Похоже, что Skearney обнаружил ошибку, о которой вы спрашивали, но это все еще проблема.