[gelöst] ISO C++ forbids declaration of ...

Alles rund um die Programmierung mit Qt
Antworten
McNik
Beiträge: 12
Registriert: 12. Juli 2006 20:14

[gelöst] ISO C++ forbids declaration of ...

Beitrag von McNik »

Hallo zusammen,
habe folgendes Problem, brauche einen QPtrVector mit Zeigern auf QCanvasRectangle (um kleine Dreicke in einem QRectangle anzueigen)

Code: Alles auswählen

Header:
private:
QPtrVector <QCanvasRectangle> inputBox;
QPtrVector <QCanvasRectangle> outputBox;

cc:
// wenn ich Elemente einfügen will
 outputBox.resize(nrout);        

    for (int i = 0; i < nrout; i++ )
...
	outputBox.insert( i , new QCanvasPolygon(gatterItem));
...  // und das selbe natürlich für inputBox....

dann bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

canvasgatterview.h:128: error: ISO C++ forbids declaration of ‘QPtrVector’ with no type
canvasgatterview.h:128: error: expected ‘;’ before ‘<’ token
canvasgatterview.h:129: error: ISO C++ forbids declaration of ‘QPtrVector’ with no type
canvasgatterview.h:129: error: expected ‘;’ before ‘<’ token
Leider habe ich auch noch nicht so den totalen Überblick über c++ und Qt....bin noch anfänger
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde mal sagen dass QCanvasRectangle und/oder QPtrVector noch icht definiert sind -> Header includieren!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
McNik
Beiträge: 12
Registriert: 12. Juli 2006 20:14

Problem gelöst!!

Beitrag von McNik »

Jiüp genau das wars, habe die include Datei nur im cpp und IM FALSCHEN HEADER!! eingefügt, so doof muss man erst mal sein!!!!

Auf jeden Fall 1000 Dank für die Antwort, manchmal sieht man die einfachsten Dinge einfach nicht!!!!!!
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

Beitrag von reani »

Hi,

Da der Titel des Threads paßt, missbrauche ich den Thread mal für meinen - fast exakt gleichen - Fehler.

Ich krieg die gleichen Fehlermeldungen:

Code: Alles auswählen

MenunGUI.h:35: error: ISO C++ forbids declaration of 'GLWidget' with no type
MenunGUI.h:35: error: expected ‘;’ before ‘*’ token
MenunGUI.h:40: error: ISO C++ forbids declaration of 'GLWidget' with no type
MenunGUI.h:40: error: expected ‘;’ before ‘*’ token
GLWidget ist der Name der Klasse mit der ich mein OpenGL-Widget erstelle.

Nun hab ich mir den bisherigen Thread durchgelesen und hab mal alles eingebunden, das im File vorkommt.
-> Daran scheints aber nicht zu liegen.

MenuGUI.h:

Code: Alles auswählen

#include <QApplication>
#include <QtGui>
#include <QtOpenGL>
#include <QWidget>
#include <QMainWindow>
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
#include <QSlider>
#include <QLineEdit>
#include <QGroupBox>
#include <QScrollArea>
#include <QAction>
#include <QGLWidget>
#include <QVector>

#include "GLWidget.h"

class MenuGUI : public QMainWindow
{
    Q_OBJECT
public:
    MenuGUI();
	QWidget *getWidget();
	GLWidget *getGLWidget();    <<Fehlermeldung verweist auf diese Zeile
private:
	//objects
	GLWidget *glWidget;      <<Fehlermeldung verweist auf diese Zeile
	QWidget *mainWidget;
	QWidget *sideWidget;
	QScrollArea *glWidgetArea;
	QGroupBox *RotateControlsGroup;
	QLineEdit *xTextField;
	QLineEdit *yTextField;
	QLineEdit *zTextField;
	QLabel *xLabel;
	QLabel *yLabel;
	QLabel *zLabel;
	QComboBox *dimensionBox;
	QPushButton *quitButton;
	QPushButton *goButton;
};
Welchen Grund könnten die Fehlermeldungen haben?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zeige mal deine glwidget.h
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

Beitrag von reani »

Bitte sehr...meine GLWidget.h: (eigentlich nichts Besonders)

Code: Alles auswählen

#include <QtGui>
#include <QtOpenGL>
#include <QGLWidget>
#include <QPoint>
#include <QVector>

#include "MenuGUI.h"

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    int xRotation() const { return xRot; }
    int yRotation() const { return yRot; }
    int zRotation() const { return zRot; }
public slots:
    void setXRotation(int angle);
    void setYRotation(int angle);
    void setZRotation(int angle);
signals:
    void xRotationChanged(int angle);
    void yRotationChanged(int angle);
    void zRotationChanged(int angle);
protected:
    virtual void initializeGL();
    virtual void paintGL();
    virtual void resizeGL(int width, int height);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
private:
    //objects
    int xRot;
    int yRot;
    int zRot;
    QPoint lastPos;
    QVector< QVector<GLdouble> > coordinatesVector;
    QVector< QVector<int> > elementsVector;
    //functions
    void normalizeAngle(int *angle);
};
Gestern hatte ich noch eine Vermutung, dass es vielleicht was damit zu tun hat, dass ich keinen Konstruktor für die Klasse hab. Stellte sich leider als reine Vermutung raus :?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

mist, sehe jetzt erst das Problem:

Code: Alles auswählen

GLWidget *getGLWidget();
() get da nicht ...

Und nochwas. Wenn man in der Klasse nur Pointer hat, reicht eine Vorwärtsdeklaration:

Code: Alles auswählen

//#include "GLWidget.h"        // auskommentiert da unnötig

class GLWidget;

class MenuGUI : public QMainWindow {
...
   GLWidget *m_widget;
};

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

Beitrag von reani »

aber das

Code: Alles auswählen

GLWidget *getGLWidget();
ist eine public function, die mir mein GLWidget-Object zurückgibt.

Und warum schreit er dann bei

Code: Alles auswählen

GLWidget *glWidget;
auch wenn ich die Function rausnehm?

P.S.: Danke für den Tipp mit der Vorwärtsdeklaration!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

reani hat geschrieben:aber das

Code: Alles auswählen

GLWidget *getGLWidget();
ist eine public function, die mir mein GLWidget-Object zurückgibt.
Sorry, verschaut.

Aber ich glaube jetzt sehe ich was 'falsch' ist

glwidget.h: #include "MenuGUI.h"
MenuGUI.h: #include "GLWidget.h"

d.h. wenn GLWidget.h inkludiert wird, wird auch MenuGUI.h inkludiert wobei dann aber GLWidget nicht mehr inkludiert wird (wegen dem hoffentlich vorhandenen #ifdef GLWIDGET_H...).

Aber für sowas sind ja Vorwärtsdeklarationen da. :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

Beitrag von reani »

ok, also das Prinzip der Vorwärtsdeklarationien hab ich ja verstanden und auch in andere Dateien eingebaut.

Wenn ich jetzt aber in der Headerdatei:

Code: Alles auswählen

...
class MenuGUI;
class GLWidget;

class Controller : public QMainWindow
{
...
private:
    //objects
    MenuGUI *gui;        <<Fehlermeldung
    ...
};
und im cpp-File dann:

Code: Alles auswählen

gui = new MenuGUI;        <<Fehlermeldung    
dann krieg ich eine Fehlermeldung:

Code: Alles auswählen

Controller.cpp: error: invalid use of undeclared type 'struct MenuGUI'
Controller.h: error: forward declarartion of 'struct MenuGUI'
Sorry, aber jetzt bin ich total verwirrt.
Warum krieg ich jetzt eine Fehlermeldung bzgl. der Vorwärtsdeklaration?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Im Source musst Du den Header dann natürlich einbinden!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

[gelöst]

Beitrag von reani »

[gelöst]

Nachdem ich nicht Ersteller dieses Threads bin, mach ich den anderen Forumbenutzern mal so klar, dass das Problem gelöst wurde!

Danke Christian81! :)
Antworten