Klassendefinition Fehler
-
Hallo,
nach dem ich mit Eurer Hilfe erfolgreich mein LINKER Problem gelöst habe, habe ich nun ein neues Problem und bräuchte nochmals Eure Hilfe.Ich habe eine Klasse config mit der Variabel confErr als string und public deklariert. Dann mache ich in main() ein config conf; um die Klasse "anzulegen".
Nun wollte in in der Klasse MyWindow mittels conf.confErr = "Fehler"; auf die Stringvariable zugreifen. Ich bekomme aber folgenden Fehler.
mywindow.cpp .\mywindow.cpp(51) : error C2065: 'conf': nichtdeklarierter Bezeichner .\mywindow.cpp(51) : error C2228: Links von ".confErr" muss sich eine Klasse/Struktur/Union befinden. Typ ist ''unknown-type'' .\mywindow.cpp(52) : error C2065: 'conf': nichtdeklarierter Bezeichner .\mywindow.cpp(52) : error C2228: Links von ".confErr" muss sich eine Klasse/Struktur/Union befinden. Typ ist ''unknown-type'' main.cpp .\main.cpp(12) : warning C4101: 'conf': Unreferenzierte lokale Variable Code wird generiert...Mir fehlt gerade voll der Durchblick.
Grüße
tYREL
-
Brauchst du conf nur in der Klasse MyWindow? Dann könntest du conf einfach als Member dieser Klasse deklarieren.
-
nee ich brauche conf global. ich habe auch schon global definiert hat aber auch nichts gebracht. komisch finde ich ich, ich habe die ganzen routinen für meine anwendung eigendlich fertig (konsolen version) und wollte das ganze jetzt mit QT verheiraten und seit ich die MyWindow Klasse drin habe, läuft überhaupüt nichts mehr. In der Konsolenversion habe ich die Klasse config einfach mittelns config conf; global defniert und konnte von allen anderen Klassen (4 Stück) mittelns conf.conErr zum Beispiel auf diese Varibale zugreifen, ich blicke einfach nicht warum dass jetzt nicht mehr gehen soll.
-
Dann deklariere in MyWindow ein Member vom Typ config* und weise die Adresse der Instanz conf zu.
P.S.: Dazu muss aber der Typ config in MyWindow.cpp bekannt sein.
-
Dass du ohne Probleme auf das Objekt zugreifen konntest bezweifle ich. Denn auch Qt hält sich an den C++-Standard. Hast du vllt. an die Objekte früher das conf-Objekt übergeben?
Ansonsten hat Qt eine eigene schöne Klasse "QSettings". Wenn das für dich ne Option ist.
Wenn nicht schau dich mal nach dem Singleton Pattern um. Config einfach als Singleton gestalten.Grüße
Franz
-
_matze schrieb:
Dann deklariere in MyWindow ein Member vom Typ config* und weise die Adresse der Instanz conf zu.
P.S.: Dazu muss aber der Typ config in MyWindow.cpp bekannt sein.
_matze schrieb:
Dann deklariere in MyWindow ein Member vom Typ config* und weise die Adresse der Instanz conf zu.
P.S.: Dazu muss aber der Typ config in MyWindow.cpp bekannt sein.
hab's jetzt mal so gemacht. scheint ok zu sein. jetzt baue ich mal den rest der routinen ein

danke für die hilfe
-
franz schrieb:
Dass du ohne Probleme auf das Objekt zugreifen konntest bezweifle ich. Denn auch Qt hält sich an den C++-Standard. Hast du vllt. an die Objekte früher das conf-Objekt übergeben?
Ansonsten hat Qt eine eigene schöne Klasse "QSettings". Wenn das für dich ne Option ist.
Wenn nicht schau dich mal nach dem Singleton Pattern um. Config einfach als Singleton gestalten.Grüße
FranzHallo,
es war/ist tatsächlich so, dass es sauber funktionniert. sowohl unter VC2008 als auch unter Linux mit g++. Ich hatte erst Probleme als ich das ganze Qt Zeugs reingebastetlt habe.
Auf jeden Fall, scheint es jetzt mal zu laufen. Vielen Dank Euch allen für die Hilfe.
Grüße
tYREL
-
Sorry, ich muß nochmals dieses Problem noch oben schieben. Ich bekomme es nicht hin. Also ich habe in main.cpp, mywindow.cpp und mywindow.h - config.h includiert. Und dann folgendes gemacht.
class MyWindow : public QWidget { Q_OBJECT public: config* pconf; MyWindow(QWidget *parent = 0); // Konstruktorin main() habe ich config conf; drin. in mywindow.cpp wollte ich dann noch die Adresse zuweisen. Aber ich glaube ich mache da echt was falsch.
MyWindow::MyWindow(QWidget *parent) : QWidget(parent) { pconf = &conf;Dabei ist es egal ob ich config conf; innerhalb von main() oder außerhalb (global) mache. Fehler ist der selbe.
So hatte ich den Tip von matze verstanden. Auch in C++ von A bis Z habe ich es so gefunden. Ich bekomme aber immer noch folgende Fehlermeldung.1>.\mywindow.cpp(13) : error C2065: 'conf': nichtdeklarierter BezeichnerDanke+Grüße
tYREL
-
Naja, wie soll denn dem Konstruktor auch das conf-Objekt in irgendeiner Weise bekannt sein, wenn in dessen Scope kein conf existiert? Und nur global in der main.cpp bringt dir auch nix in mywindow.cpp.
Du hast 4 Möglichkeiten:
- Übergib allen Klassen, die was mit conf machen müssen, ein Config-Objekt im Konstruktor
- Deklariere conf als extern
- Mach aus der Config-Klasse einen Singleton
- Verwende QSettings in Verbindung mit QCoreApplication::setApplicationName(); usw. (siehe dazu Qt-Doku)
3 und 4 sind die Möglichkeiten, die ich dir am ehesten empfehlen würde. Hab ich aber schon mal gesagt

-
franz schrieb:
3 und 4 sind die Möglichkeiten, die ich dir am ehesten empfehlen würde. Hab ich aber schon mal gesagt

Ich weiss
. Danke Dir. Ich versuche mich jetzt mal an Version 3.
Grüße
tYREL