Problem mit Timer in Klasse
-
Hallo,
in meinen derzeitigen Projekt benötige ich einen Timer der in einer von mir deklarierten Klasse aufgerufen wird.
Der prinzipielle Programmcode sieht so aus://--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" class TTest : public TObject { public: void __fastcall Time(void); }; TForm1 *Form1; TTest *Test; bool Modus; //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Label1->Visible = true; } //--------------------------------------------------------------------------- void __fastcall TTest::Time (void) { Timer1->Enabled = true; } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Timer1->Interval = 2000; Timer1->Enabled = false; } //---------------------------------------------------------------------------
Wenn ich diesen Code compilieren will, kommt die Meldung "Unit1.cpp(26): Undefined symbol 'Timer1'." als wenn der Timer gar nicht vorhanden wäre. Wenn ich die Zeile "Timer1->Enabled = true;" direkt in die Button-Click Methode schreibe ist es gar kein Problem, alles klappt wie gewollt, nur bei der Klasse geht dann gar nichts mehr.
In diesem Beispiel ist die Klasse selbstverständlich nicht notwendig, das ist mir klar, aber in meinem größeren Projekt schon. Ich habe das Problem nur auf dieses Beispiel reduziert, damit ihr mir hoffentlich besser helfen könnt.
Also, warum kommt da diese Fehlermeldung?
Wichtig zu erwähnen ist sicher noch, dass ich mit dem Borland C++ Builder 1 arbeite.
Ich hoffe auf eure Hilfe!
Gruß
Jan/edit: Anmerkung: Code zwischen [ cpp] und [ /cpp] einfügen!
-
Timer1 gehört der Klasse TForm1 und ist keine Variable in Deiner Klasse.
Wenn Du den Timer ansprechen willst mußt Du das so ähnlich machen:Form1->Timer1->Enabled = true;
Ob das ein guter Stil ist, ist eine andere Frage...
Gruß,
Alexander
-
Is einleuchted das so zu machen, hab gestern wohl den Wald vor lauter Bäumen nicht gesehen.
Nur noch eins, warum ist es denn kein guter Stil das so zu machen wie von dir vorgeschlagen?
Gruß
Jan
-
Naja, die Verwendung einer globalen Variable innerhalb einer Klasse sorgt
natürlich dafür, daß diese Klasse nicht mehr unabhängig davon verwendet
werden kann. Das mag in Deinem Fall kein Problem sein. Wenn Du aber eine
Klasse wiederverwenden willst, bekommst Du damit u.U. Probleme. Deine Klasse
wird ohne die globale Variable nicht funktionieren (und auch nicht kompilieren).
Meiner Meinung nach entspricht das nicht eben dem Gedanken der Objektorientierung.Es gibt zum Thema globale Variablen auch einen FAQ-Beitrag und zum Thema Objekt-
orientierung und MVC (auch Document/View) gibt es unzählige Bücher und sicherlich
auch Online-Quellen.Gruß,
Alexander