#ifndef funktioniert nicht

Alles rund um die Programmierung mit Qt
Antworten
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

#ifndef funktioniert nicht

Beitrag von Ozzy »

Moin,
ich sitze gerade an einem Qt-Projekt (mit QtCreator erstellt). Nun sollen 2 Dateien eine header einbinden; eigentlich kein Problem:

Code: Alles auswählen

#ifndef GAMEPAD_H
#define GAMEPAD_H
...
#endif
Zuerst hatte ich das vergessen, und dann kamen natürlich tausend Fehler, dass dieses und jenes schon bekannt wäre. Aber selbst mit diesem eingefügten Code kommen die Fehler immer noch, auch wenn ich schon das Projekt bereinigt habe, alles neu erstellt, sicherheitshalber noch mal qmake ausgeführt habe...

Hat irgendjemand von Euch eine Idee, was ich da noch machen könnte? So etwas hatte ich echt noch nie...

Viele Grüße
Ozzy
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: #ifndef funktioniert nicht

Beitrag von Christian81 »

Da wir weder die Fehlermeldungen noch ein minimales (kompilierbares) Beispiel haben welches das Problem aufzeigt - nein wir können nicht helfen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Re: #ifndef funktioniert nicht

Beitrag von Ozzy »

Ok, Fehlermeldung ist (z.B.)
gamepad.cpp:-1: Fehler:multiple definition of `CLSID_DirectInput' gamepad.cpp
Fehler:first defined here main.cpp
Und so geht es dann munter weiter. Die main.cpp:

Code: Alles auswählen

#include <QtGui/QApplication>
#include "mainwindow.h"
#include "gamepad.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
die gamepad.h:

Code: Alles auswählen

#ifndef GAMEPAD_H
#define GAMEPAD_H

#include <QtCore/QCoreApplication>
#include <QThread>

#include <windows.h>
#include <string.h>
#include <iostream>

#include <initguid.h>
#include <dinput.h> // DirectInput header

class GamepadThread : public QThread
{
    Q_OBJECT
signals:
    void sendGamepadData(QList<int> Data);
private:
    void run();
private slots:
    void getGamepadData();

};

#endif // GAMEPAD_H
Und zum Schluss noch die gamepad.cpp:

Code: Alles auswählen

#include "gamepad.h"

#include <QtGui>

void GamepadThread::run()
{
    QTimer timer;
    connect(&timer, SIGNAL(timeout()), this, SLOT(getGamepadData()), Qt::DirectConnection);
    timer.setInterval(100);
    timer.start();   // puts one event in the threads event queue
    exec();
    timer.stop();
}

void GamepadThread::getGamepadData()
{
}
Alle Fehler betreffen die "dinput.h" in der gamepad.h

Viele Grüße
Christoph
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: #ifndef funktioniert nicht

Beitrag von Christian81 »

Das muss ein MSVC - spezifisches Problem sein und hat absolut nichts mit Qt zu tun. Ich würde ein kleines Proggie ohne Qt schreiben und mal bei einem Windows-API - Forum nachfragen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: #ifndef funktioniert nicht

Beitrag von franzf »

Und noch eine kleine Warnung hinten dran:
GAMEPAD_H ist als include-guard EXTREM gefährlich! Include-Guards sollten wirklich einmalig sein. "GAMEPAD" kann in JEDEM Projekt auftauchen, in jeder Konstellation! Da das keine immer wieder verwendeten Konstanten sind, die tipbar sein müssen, solltest du hier wirklich möglichst sicher gehen. Baue ein:
* Projektname
* Klassen-/Headername
* Eindeutige Zeichenkette, die auch nicht lesbar oder deutbar sein muss
* Für den ganz extremen Freak kannst du auch noch den TimeStamp mit anhängen, wann du die Datei erstellt hast.

Z.B.
MY_SPACE_SHOOTER__GAMEPAD__HIUDHSJ__1293908047
Dann kannst du ziemlich sicher sein, dass es zu keinem Konflikt bei den Include-Guards kommt.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: #ifndef funktioniert nicht

Beitrag von Christian81 »

Oder '#pragma once' - das kann jeder halbwegs aktueller Compiler und man hat keine Probleme mehr.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten