Seite 1 von 1

[gelöst] was will mir der Compiler sagen?

Verfasst: 7. Dezember 2007 23:41
von qtNiko
hi,

ich kann mit einer Compiler-Fehlermeldung nichts anfangen, doch zunächst der Code:

Ich habe folgenden Code in meinem h-File:

Code: Alles auswählen

SimuDesign : public QMainWindow, private Ui::Simu_Qt4
{
	Q_OBJECT
	
	public:
	SimuDesign(QMainWindow *parent=0);
	int readWkspFile(QFile wkFile);  // <--- das ist relevant
    ...	

	private slots:
	void loadWorkspace();
    ...
        private:
         QFile wkspFile;   // <-- darum geht es
Im dazugehörigen cpp-File befinden sich die nötigen functions, z.B.:

Code: Alles auswählen

void SimuDesign::loadWorkspace() {
	  ...
	QString inFName = QFileDialog::getOpenFileName(this, ...); 
	if (!inFName.isEmpty()) {
		wkspFile.setFileName(inFName);
		if (wkspFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
			err = readWkspFile(wkspFile);      // <--- hier kommt die Fehlermeldung!
                        ...
                 }
Der Compiler meldet mir nun im cpp-File:
error: initializing argument 1 of 'int SimuDesign::readWkspFile(QFile)'
error: within this context

In den beiden Zeilen oberhalb der Fehlermeldung wird wkspFile.... akzeptiert. Aber bei der Parameterübergabe an readWkspFile() fehlt eine Initialisierung?

Um Tipps wäre ich sehr dankbar. Ich hänge total.

Verfasst: 8. Dezember 2007 09:58
von Christian81
zu wenig code
erstens fehlt ein 'class' vor deiner Klasse und zweitens sieht man nicht ob du QFile.h inkludiert hast. Ausserdem kann man QFile nicht kopieren -> man muss es als ptr oder Referenz übergeben.

Verfasst: 8. Dezember 2007 14:59
von qtNiko
Ausserdem kann man QFile nicht kopieren -> man muss es als ptr oder Referenz übergeben.
Das ist es!
Ich habe es mit Pointer probiert, und da funktioniert es. Mir war nicht klar, warum meine Lösung nicht funktionierte.
Jetzt weiß ich es zwar, aber wo steht so etwas, dass man QFile nicht kopieren kann?

Vielen Dank für den Tipp

Verfasst: 8. Dezember 2007 15:35
von Christian81
QFile ist von QObject abgeleitet. Und QObject's sind nunmal nicht kopierbar --> http://doc.trolltech.com/4.2/qobject.html

Wenn du z.B. QFile kopieren könntest hättest du auf einmal zwei QFile-Objekte die auf ein und die gleiche Datei verweisen.