2016-04-29 24 views
2

Zunächst einmal habe ich einige Lösungen gesehen, aber ich habe sie nicht verstanden. Ich bin ein totaler Newbie in QT und sogar Google hat mir nicht geholfen. Englisch ist nicht meine erste SpracheC2143: Syntaxfehler: fehlende ';' vor '*' & C4430: fehlender Typbezeichner - int wird angenommen. Hinweis: C++ unterstützt nicht default-int

Dies ist die Fehlermeldung nach dem Debuggen in 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 ';'

hier die Datei

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 

Sorry, wenn das Problem ist, war schon hier in den Fragen, aber ich habe die anderen Lösungen nicht verstanden.

Ich versuche, ein kleines Programm nur für die Show zu machen, es muss nur einige Formulare zeigen und das ist es. Es gibt einige Knöpfe und jeder Knopf öffnet ein anderes Formular und verbirgt das vorherige.

Mein Problem ist, ich habe immer meine Probleme mit Programmierung und Sprachen, oft weiß ich nicht genug, um eine Lösung zu verstehen, ich bin eher ein "jemand zeigt mir wie und dann benutze ich es und verstehe es" - Ich lerne durch "Kopie einfügen"

Könnte mir jemand sagen, was ich falsch gemacht habe? Wenn Sie mehr Informationen über das Projekt benötigen, fragen Sie einfach.

Vielen Dank im Voraus.

Hier die die angeforderten 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 

Hier ist das gesamte Projekt für qt kraftwerk.zip

+0

Wie sieht "tridialog.h" aus? – Barry

+0

bearbeitet den Beitrag ... tridialog.h ist jetzt – Tareen

+0

@barry Ist das legal? 'explizite TriDialog (QWidget * parent = 0);' –

Antwort

3

Ihr Problem ist in tridialog.h:

#include "secdialog.h" 

Wenn Sie secdialog.h umfassen, Sie bringen in Ihrer SecDialog Klassendeklaration, die einen TriDialog Zeiger hat (auf der problematischen lin e) bevor die TriDialog Klasse deklariert wird!

Da Sie eigentlich nichts brauchen von secdialog.h in tridialog.h, entfernen Sie einfach

#include "secdialog.h" 

und es sollte funktionieren.

+1

Guter Fang. Das sieht nach dem Problem aus, nach dem Tareen gesucht hat. –

+0

Wenn ich den #include folgenden Fehlercode lösche kommt – Tareen

+0

moc_secdialog.obj: -1: Fehler: LNK2019: unaufgelöste externe Symbol "private: void __cdecl SecDialog :: on_pushButton_2_clicked (void)" (? On_pushButton_2_clicked @ SecDialog @@ AEAAXXZ) in Funktion referenziert "private: static void __cdecl SecDialog :: qt_static_metacall (Klasse QObject *, enum QMetaObject :: Call, int, void * *)" (? qt_static_metacall @ SecDialog @@ CAXPEAVQObject @@ W4Call @ QMetaObject @@ HPEAPEAX @ Z) – Tareen

1

Es sieht so aus, als ob Sie einen Scoping-Fehler haben, es sei denn, ich missverstehe Ihre Absicht. Dieser Code:

namespace Ui { 
    class TriDialog; 
} 

class TriDialog : public QDialog 
{}; 

deklariert eine Klasse TriDialog im Namensraum Ui genannt und erklärt dann eine Klasse TriDialog außerhalb des Namespace Ui benannt. Sie haben jetzt zwei Klassen, Ui::TriDialog und TriDialog. Sie müssen die gesamte Definition in den Namespacebereich einfügen.

Bearbeiten: Sieht aus, als ob skearney den Fehler gefunden hat, nach dem Sie gefragt haben, aber das ist immer noch ein Problem.

Verwandte Themen