Seite 1 von 1
[gelöst] ISO C++ forbids declaration of ...
Verfasst: 2. August 2006 18:40
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
Verfasst: 4. August 2006 07:51
von Christian81
Ich würde mal sagen dass QCanvasRectangle und/oder QPtrVector noch icht definiert sind -> Header includieren!
Problem gelöst!!
Verfasst: 5. August 2006 01:27
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!!!!!!
Verfasst: 30. August 2006 23:51
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?
Verfasst: 31. August 2006 06:28
von Christian81
Zeige mal deine glwidget.h
Verfasst: 31. August 2006 11:09
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

Verfasst: 31. August 2006 11:12
von Christian81
mist, sehe jetzt erst das Problem:
() 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;
};
Verfasst: 31. August 2006 11:25
von reani
aber das
ist eine public function, die mir mein GLWidget-Object zurückgibt.
Und warum schreit er dann bei
auch wenn ich die Function rausnehm?
P.S.: Danke für den Tipp mit der Vorwärtsdeklaration!
Verfasst: 31. August 2006 11:32
von Christian81
reani hat geschrieben:aber das
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.

Verfasst: 31. August 2006 12:34
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:
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?
Verfasst: 31. August 2006 12:37
von Christian81
Im Source musst Du den Header dann natürlich einbinden!
[gelöst]
Verfasst: 31. August 2006 12:56
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!
