[gelöst] Probleme beim compilen mit QSpinBox
[gelöst] Probleme beim compilen mit QSpinBox
Nabend!
Ich habe folgendes Problem:
Ich möchte im Prinzip einfach nur ein QWidget mit ein paar QSliders, QSpinBoxes usw. basteln. Das ging auch alles astrein, bis ich ein paar QSpinBoxes bzw. QDoubleSpinBoxes einbauen wollte. Plötzlich sagt mir der Compiler folgende Fehler:
ISO C++ forbids declaration of 'QSpinBox' with no type (qspinbox.h 121)
redefinition of 'class QDoubleSpinBox' (qspinbox.h 126)
previous definition of 'class QDoubleSpinBox' (qspinbox.h 57)
Ich kann mir nicht erklären, woran das liegt, besonders weil ich das selbe Projekt auf einem anderen Rechner mit der gleichen Version von Qt und Qt Creator ohne Probleme kompilieren kann.
Der angebliche Fehler taucht in meiner widget.cpp in Zeile 15 auf. Das ist die Zeile, in der ich QSpinBox einbinde und der Rest des Fehlers spielt sich angeblich in der qspinbox.h ab, was ich mir natürlich nicht vorstellen kann.
Hat jemand eine Idee, woran sich der Compiler da aufregt?
P.S.: Der Fehler taucht auch wirklich NUR bei QSpinBox bzw. QDoubleSpinBox auf. Wenn ich die include-Zeile und die ganzen Instanzen von QDoubleSpinBox auskommentiere, wird ohne weitere Probleme kompiliert.
MfG Label
Ich habe folgendes Problem:
Ich möchte im Prinzip einfach nur ein QWidget mit ein paar QSliders, QSpinBoxes usw. basteln. Das ging auch alles astrein, bis ich ein paar QSpinBoxes bzw. QDoubleSpinBoxes einbauen wollte. Plötzlich sagt mir der Compiler folgende Fehler:
ISO C++ forbids declaration of 'QSpinBox' with no type (qspinbox.h 121)
redefinition of 'class QDoubleSpinBox' (qspinbox.h 126)
previous definition of 'class QDoubleSpinBox' (qspinbox.h 57)
Ich kann mir nicht erklären, woran das liegt, besonders weil ich das selbe Projekt auf einem anderen Rechner mit der gleichen Version von Qt und Qt Creator ohne Probleme kompilieren kann.
Der angebliche Fehler taucht in meiner widget.cpp in Zeile 15 auf. Das ist die Zeile, in der ich QSpinBox einbinde und der Rest des Fehlers spielt sich angeblich in der qspinbox.h ab, was ich mir natürlich nicht vorstellen kann.
Hat jemand eine Idee, woran sich der Compiler da aufregt?
P.S.: Der Fehler taucht auch wirklich NUR bei QSpinBox bzw. QDoubleSpinBox auf. Wenn ich die include-Zeile und die ganzen Instanzen von QDoubleSpinBox auskommentiere, wird ohne weitere Probleme kompiliert.
MfG Label
Zuletzt geändert von Label am 14. März 2011 14:49, insgesamt 1-mal geändert.
Die header ist ganz normal und kurz:
in der .cpp sieht es so aus:
Code: Alles auswählen
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_HCode: Alles auswählen
#include "widget.h"
#include <QLabel>
#include <QSpinBox>
//... weitere includes
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
// ...
QLabel *label_PS_xLoc = new QLabel("PS x", this);
QDoubleSpinBox *doublespinbox_PS_xLoc = new QDoubleSpinBox(this);
doublespinbox_PS_xLoc->setDecimals(3);
doublespinbox_PS_xLoc->setSingleStep(10);
doublespinbox_PS_xLoc->setRange(-1000, 1000);
//...
}Wie gesagt, auf meinem Laptop lässt sich das Projekt ohne Probleme übersetzen.
Vielleicht hilft das weiter:
Mein Laptop läuft auf Win XP (da funktioniert es)
meine PC läuft auf Win Vista (hier nicht)
... allerdings habe ich auch noch Ubuntu auf meinem PC drauf. Ich probiere mal ob es sich da übersetzen lässt ...
Vielleicht hilft das weiter:
Mein Laptop läuft auf Win XP (da funktioniert es)
meine PC läuft auf Win Vista (hier nicht)
... allerdings habe ich auch noch Ubuntu auf meinem PC drauf. Ich probiere mal ob es sich da übersetzen lässt ...
Kannst du dir mal den qspinbox.h-Header vornehmen?
Bei Fehlermeldungen der gehübschten Compiler-Ausgabe modernerer IDEs kann man ja direkt an die Fehlerstelle springen. Evtl. hast du dich so in den qspinbox-Header navigiert und ungewollt darin rumeditiert.
Sicher die qspinbox.h mal weg und ersetz sie durch den Original-Header deiner Qt-Version.
Bei Fehlermeldungen der gehübschten Compiler-Ausgabe modernerer IDEs kann man ja direkt an die Fehlerstelle springen. Evtl. hast du dich so in den qspinbox-Header navigiert und ungewollt darin rumeditiert.
Sicher die qspinbox.h mal weg und ersetz sie durch den Original-Header deiner Qt-Version.
Ich habe jetzt mal ausprobiert, nur die #include<QSpinBox> auszukommentieren und zu kompilieren. Das funktioniert auch nicht, weil, wie sollte es anders sein, "QDoubleSpinBox was not declared in this scope".
Ich bin mal in die qspinbox.h rein und da wird tatsächlich mehrmals QDoubleSpinBox deklariert. Allerdings steht vor der ersten Deklaration (Zeile 53):
ich habe aber noch nicht rausgefunden, wofür das gut ist.
Ich bin mal in die qspinbox.h rein und da wird tatsächlich mehrmals QDoubleSpinBox deklariert. Allerdings steht vor der ersten Deklaration (Zeile 53):
Code: Alles auswählen
#ifndef QT_NO_SPINBOXIch sehe gerade, dass sich auch die zweite Deklaration von QDoubleSpinBox im
Block befindet. Also kann es wahrscheinlich nicht die Ursache sein.
Code: Alles auswählen
#ifndef QT_NO_SPINBOX
...
#endifDanke für den Tipp aber wie komme ich an die Original-Header?Sicher die qspinbox.h mal weg und ersetz sie durch den Original-Header deiner Qt-Version.
Ich habe ja keine Kopie sämtlicher Qt-Header. Da liegt nur die eine qspinbox.h in meinem Qt-Ordner (bis auf die zwei anderen qspinbox.h, die auf die eine 'richtige' qspinbox.h verweisen)
edit: Die Frage hat sich erledigt, ich habe ja schliesslich noch die header von meinem Laptop ...
Danke franzf!
Dein Tip, die header zu tauschen war richtig.
Folgendes hat zu meinem Fehler geführt:
In meinem Projekt wollte ich erst mit normalen QSpinBoxes arbeiten.
Nachdem ich sie schon eingebunden und instanziert hatte, habe ich mitbekommen, dass es wohl besser wäre mit QDoubleSpinBoxes zu arbeiten.
Daraufhin habe ich eines der - meistens hilfreichen - Features der IDE benutzt. In meinem Fall: [Strg] + [Shift] + [R] im QtCreator, und habe einfach meine QSpinBoxes in QDoubleSpinBoxes geändert, ohne zu ahnen, dass QtCreator nicht nur meinen eigenen Quellcode ändert, sondern auch die Deklaration der QSpinBox in der qspinbox.h in eine QDoubleSpinBox ändert.
So schnell kann es gehen ...
Dein Tip, die header zu tauschen war richtig.
Folgendes hat zu meinem Fehler geführt:
In meinem Projekt wollte ich erst mit normalen QSpinBoxes arbeiten.
Nachdem ich sie schon eingebunden und instanziert hatte, habe ich mitbekommen, dass es wohl besser wäre mit QDoubleSpinBoxes zu arbeiten.
Daraufhin habe ich eines der - meistens hilfreichen - Features der IDE benutzt. In meinem Fall: [Strg] + [Shift] + [R] im QtCreator, und habe einfach meine QSpinBoxes in QDoubleSpinBoxes geändert, ohne zu ahnen, dass QtCreator nicht nur meinen eigenen Quellcode ändert, sondern auch die Deklaration der QSpinBox in der qspinbox.h in eine QDoubleSpinBox ändert.
So schnell kann es gehen ...