Seite 1 von 1

gelöst: Fehlermeldung expected init-declarator

Verfasst: 13. Juni 2006 00:16
von mikro
hi,
ich versuche eine Klasse mit dem Singleton-Pattern zu schreiben und eigentlich schreibe ich nur von funktionierenden Klassen ab:

Code: Alles auswählen

Deklaration:
class cConstants {
public:
	static cConstants* self();
    QString getArtBez(int);
    int getArtID(QString);
private:
    cConstants();
    static QPointer<cConstants> _self;
    QVector<QString> eigenschaftsArten;
}

Code: Alles auswählen

Implementierung:
#include "constants.h"

QPointer<cConstants> cConstants::_self = 0L;
//
cConstants* cConstants::self() {
    if ( !_self )
        _self = new cConstants();
    return _self;
}

cConstants::cConstants() {
//
}

QString cConstants::getArtBez(int id) {
    return eigenschaftsArten[id];
}

int cConstants::getArtID(QString value) {
    return eigenschaftsArten.indexOf(value);
}
aus irgendeinem Grund kriege ich dabei diese Fehlermeldung:
Makefile.Debug:372: warning: overriding commands for target `build\.rcc\qrc_WERTer.cpp'
Makefile.Debug:323: warning: ignoring old commands for target `build\.rcc\qrc_WERTer.cpp'
src\constants.cpp:4: error: expected init-declarator before "cConstants"
src\constants.cpp:4: error: expected `,' or `;' before "cConstants"
src\constants.cpp:7: instantiated from here
C:\Qt\4.1.3\include\QtCore\..\..\src\corelib\kernel\qpointer.h:58: error: invalid static_cast from type `QObject*' to type `cConstants*'
src\constants.cpp:8: instantiated from here
C:\Qt\4.1.3\include\QtCore\..\..\src\corelib\kernel\qpointer.h:48: error: comparison between distinct pointer types `QObject*' and `cConstants*' lacks a cast
C:\Qt\4.1.3\include\QtCore\..\..\src\corelib\kernel\qpointer.h:48: error: no matching function for call to `QMetaObject::changeGuard(QObject**, cConstants*&)'
C:\Qt\4.1.3\include\QtCore\..\..\src\corelib\kernel\qobjectdefs.h:257: note: candidates are: static void QMetaObject::changeGuard(QObject**, QObject*)
mal abgesehen davon, dass ich keine Ahnung habe, was er mit dem overriding commands will - das hat er schon länger und kompiliert trotzdem was ich erwarte. Aber was sollen mir bitte die Fehlermeldungen sgen??

Verfasst: 13. Juni 2006 00:39
von patrik08
Ich begreife langsam den compiler error ...

QMetaObject:: immer ... oder fast immer fehlt den Q_OBJECT

Die bedeutung von Q_OBJECT kenne ich nicht ... doch wenn mann ableitet oder mit pointer arbeitet ... muss immer eine soche macro sein...

auch eigene classen

Code: Alles auswählen

class Xslt_Converter : public QObject
{
    Q_OBJECT
    
public:

aber public QObject kann nur einmal vorkommen in der ableitungen....

Verfasst: 13. Juni 2006 08:28
von mikro
stimmt, ein paar der Fehlermeldungen beruhten darauf, dass man QPointer nur mit Q_Objects verwenden kann, d.h. ich muss nicht nur das Q_OBJECT-Makro ergänzen, sonden die Klasse auch von QObject ableiten.
Das habe ich jetzt beides gemacht, aber die error: expected init-declarator before "cConstants" - Meldung bleibt.

Verfasst: 13. Juni 2006 09:54
von Christian81
Es fehlt ein Semikolion nach der Klassendeklarartion - hatten wir vor kurzem schon einmal.

Verfasst: 13. Juni 2006 10:33
von mikro
stimmt, das wars. DANKE
und das war sogar noch für einen andere genauso skurrile Fehlermeldung an einer anderen Stelle verantwortlich die ich mir genausowenig erklären konnte.
ich hatte halt die Gerüste aller anderen Klassen mit einem Wizard erstellen lassen und immer das Semikolon übersehen :oops:
C++ gibt aber auch teils unverständliche Fehlermeldungen *Grummel* da lob ich mir doch PHP *Seufz*

Verfasst: 13. Juni 2006 10:41
von Christian81
Immer wenn solche komischen Fehlermeldungen kommen sollte man auf das Semikolion nach den Klassendeklarationen schauen - das ist mir schon so oft passiert und immer wieder kam eine andere (ist aber auch schwer für den Compiler an dieser Stelle das Problem zu erkennen, denke ich zumindest:

Code: Alles auswählen

class MyClass{
 ...
};

MyClass MyInstatiatedClass;
oder eben

class MyClass{
 ...
} MyInstatiatedClass;
--> der Compiler weiss nicht was der Programmierer wollte.