Seite 1 von 1

Qt, Plugin, "expected identifier before string constant

Verfasst: 2. Februar 2011 23:35
von dusti
Ich möchte mein Programm mit Plugins erweitern. Dazu möchte ich ein Interface deklarieren. Dafür habe ich folgenden header:

Code: Alles auswählen

#ifndef LYRICSPLUGININTERFACE_H
#define LYRICSPLUGININTERFACE_H

#include <QString>

class LyricsPluginInterface
{
public:
    virtual ~LyricsPluginInterface();

    virtual QString getDescription();
    virtual QString getCredits();
    virtual QString getLyrics(QString artist, QString album, QString song);
};
Q_DECLARE_INTERFACE(LyricsPluginInterface, "ch.favor-it.MMP.LyricsPluginInterface/1.0")

#endif // LYRICSPLUGININTERFACE_H
Das Problem ist nun, dass ich folgende Fehler bekomme:
..\MMP\/lyricsplugininterface.h:15: error: expected identifier before string constant

..\MMP\/lyricsplugininterface.h:15: error: expected ',' or '...' before string constant

..\MMP\/lyricsplugininterface.h:15: error: expected constructor, destructor, or type conversion at end of input
Zeile 15 bezieht sich auf die Zeile: "Q_DECLARE_INTERFACE(...)"
Ich habe absolut keine Idee, was da falsch sein könnte. hat jemand einen Tipp?

Danke schonmal, dusti

Verfasst: 3. Februar 2011 01:01
von padreigh
Geh mal auf http://doc.qt.nokia.com/latest/plugins-howto.html und scroll runter bis The Lower-Level API: Extending Qt Applications .. dann vorschtig weiter bis For example, here's the definition of an interface class: dann schaust du noch mal gaaaanz scharf hin ... und siehst was die haben und du nicht. S klappts dann auch mit dem Interface :) .. und genau dafür ist die API auch da ;)

Verfasst: 3. Februar 2011 09:49
von dusti
Danke, du hast mich auf die richtige Spur gebracht. Allerdings stehe ich jetzt wirklich vor einem Rätsel. Ich habe nun folgenden Code:

Code: Alles auswählen

#ifndef LYRICSPLUGININTERFACE_H
#define LYRICSPLUGININTERFACE_H

#include <QString>
#include <QWidget>

class LyricsPluginInterface
{
public:
    virtual ~LyricsPluginInterface();

    virtual QString getDescription();
    virtual QString getCredits();
    virtual QString getLyrics(QString artist, QString album, QString song);
};
Q_DECLARE_INTERFACE(LyricsPluginInterface, "ch.favor-it.MMP.LyricsPluginInterface/1.0")

#endif // LYRICSPLUGININTERFACE_H
Der einzige Unterschied zu obigem Code ist, dass ich QWidget noch inkludiert habe. Wieso muss ein selbstgeschriebenes Plugin QWidget inkludieren? Ich möchte ja gar keine GUI in dem Plugin machen, ausserdem benutze ich nirgendwo ein QWidget, wieso beschwert sich da also der Compiler? Ausserdem konnte ich nirgendwo in der Dokumentation lesen, dass es notwendig ist, QWidget zu inkludieren. Oder habe ich da einfach was überlesen?

Verfasst: 3. Februar 2011 10:35
von Christian81
Weil QWidget wohl die richtigen Dateien inkludiert... Siehe http://doc.qt.nokia.com/4.7/qtplugin.html

Verfasst: 3. Februar 2011 15:46
von padreigh
Das Stichwort ist PURE VIRTUAL ... bei denen steht immer noch ein "= 0"; hinter den Methodendeklarationen ... versuch das mal bei dir und nimm das QWidget wieder raus ...