[gelöst]Compiler spricht in Rätseln

Alles rund um die Programmierung mit Qt
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

[gelöst]Compiler spricht in Rätseln

Beitrag von qtNiko »

hallo,

nachdem ich ein wenig Übung mit Qt4 habe, begann ich ein neues Projekt - ganz nach dem Muster eines vorhergehenden, welches ich gut hingekriegt hatte.

Ich möchte wieder mal ein C-Programm, das auf der Kommandozeile funktioniert, mit einer Qt4-GUI umgeben.
Die GUI, MainWin_GUI, habe ich mit dem Designer erstellt. Mit qmake entsteht daraus eine automatisch erzeugte Datei, ui_MainWin_GUI.h, die in meinem h-File includiert wird. Die Klasse dazu heisst MilFKM. Ich fange gerade erst an, aber sofort hänge ich an einigen rätselhaften Fehlermeldungen.
Dazu mein mainWindow.h-File (noch recht leer):

Code: Alles auswählen

#include "ui_MainWin_GUI.h"  // enthält u.a. QMainWindow

class MilFKM : public QMainWindow, private Ui::MainWin_GUI
{
	Q_OBJECT
	
	public:
	MilFKM(QMainWindow *parent=0);
	
}
Dazu die Implementierung, mainWindow.cpp (get_fk_position.h gehört zu dem C-Programm, zu dem die GUI gedacht ist):

Code: Alles auswählen

#include <QtGui>

#include "mainWindow.h"

extern "C" {                                               <------------- hier wird 1 Fehler gemeldet
	#include "get_fk_position.h"
}

MilFKM::MilFKM(QMainWindow *parent) : QMainWindow(parent)
{		/* Constructor */
	setupUi(this);
	
}

Das Hauptprogramm dazu, mainAppl.cpp:

Code: Alles auswählen

#include <QApplication>
#include "mainWindow.h"

int main(int argc, char *argv[])    <---- hierzu gibt es 4 Fehlermeldungen
{
    QApplication app(argc, argv);
    MilFKM guiWin;
    guiWin.show();
    return app.exec();
}
Und jetzt gibt es folgende Fehlermeldungen:
1. In mainAppl.cpp (alle 4 Fehler an der markierten Zeile):
error: new types may not be defined in a return type
error: two or more data types in declaration of 'main'
error: '::main' must return 'int'
note: (perhaps a semicolon is missing after the definition of ‘MilFKM’) mainAppl.cpp
Ich fürchte, ich habe Scheuklappen auf, aber was ist am Code denn falsch? (ich habe ihn aus dem funktionierenden, vorhergehenden Qt4-Programm kopiert und nur die Namen entsprechend modifiziert - dort hatte es geklappt)

2. In mainWindow.cpp:
error: expected unqualified-id before string constant mainWindow.cpp

Ich habe so das Gefühl, dass der Fehler in mainWindow.cpp die eigentliche Ursache ist und die anderen Fehler nur Folgeeffekte darstellen.
Bei meinem ersten Versuch, eine GUI für ein C-Programm zu schreiben, hatte ich zunächst auch Probleme, mit der extern "C" Anweisung. Irgendwann, ich weiss nicht warum, ging es dann. Dieses "irgendwann" fehlt hier noch :(

Über Tipps würde sich ein völlig frustrierter Programmierer sehr freuen.
Zuletzt geändert von qtNiko am 7. Januar 2008 10:07, insgesamt 1-mal geändert.
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

noch ein Nachtrag:

Ich arbeite mit Eclipse 3.1.1 und CDT3.0.2 auf SuseLinux 10.1
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

Der Verdacht, dass mit extern "C" etwas nicht stimmt, verdichtet sich:
Testweise habe ich die Zeilen

Code: Alles auswählen

extern "C" {
	#include "get_fk_position.h"
}
von mainWindow.cpp nach mainWindow.h verschoben mit folgenden Auswirkungen:
1. in mainAppl.cpp und mainWindow.cpp gibt es keine Fehler mehr!
2. in mainWindow.h (wo jetzt die Anweisung extern "C" steht) gibt es den Fehler
error: expected declaration before ‘}’ token
und in get_fk_position.h gibt es weitere Fehler. Der Code dort

Code: Alles auswählen

...
typedef enum {FALSE=0, TRUE} BOOL ;          <--------- Fehler 1, siehe Text

int get_fk_position(USINT *pBild, 
					 BILDPKT *pFKPos,
					 fov iFOV,
					 BOOL fErstMessg,              <-------Fehler 2, siehe Text
					 FK_LAGE *pFKLage);
...
Fehler 1: error: expected '}' before 'false'
error: expected constructor, destructor, or type conversion before ‘;’ token
error: expected identifier before 'false'
error: expected unqualified-id before 'false'
Fehler 2: error: BOOL has not been declared -- das ist die Folge von Fehler 1

Vermutung: FALSE und TRUE sind bekannte Bezeichner. Allerdings war dies beim Compilieren als reines C-Programm kein Problem.

Deshalb weiterer Versuch:
aus FALSE und TRUE in obigem typedef enum mache ich falsch und gut mit folgenden Auswirkungen:
1. die Fehler in get_fk_position.h sind weg :)
2. in mainAppl.cpp habe ich wieder die obigen 4 Fehlermeldungen :(
und dazu noch in mainWindow.cpp einen neuen:

Code: Alles auswählen

#include <QtGui>
#include <QtCore>  // für QString, etc.
#include "mainWindow.h"

MilFKM::MilFKM(QMainWindow *parent) : QMainWindow(parent)    <---- Fehlermeldung 3
{		/* Constructor */
	setupUi(this);
	
}
Fehler 3: error: new types may not be defined in a return type mainWindow.cpp
error: return type specification for constructor invalid
error: (perhaps a semicolon is missing after the definition of 'MilFKM')
und noch 2 weitere Fehler in moc_mainWindow.cpp, das allerdings automatisch durch qmake erzeugt wird.

Ich beginne, mich im Kreis zu drehen
:x
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

C++ basics, aber an der Stelle kann der Compiler nichts anderes tun als in Rätseln zu sprechen - ist mir auch schon ab und zu passiert.

Hinter der Klassendefinition fehlt ein ';'

Code: Alles auswählen

class foo {
...
};
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

danke für den Hinweis.

Die C++ Syntax hat es aber auch in sich :wink:
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Antworten