Hallo Leute,
erstmal nettes Forum . Jetzt zu meinem Problem: Hab zwei Forms, also zwei Klassen Form1 in Form1.h und Form2 in Form2.h. Estell jetzt in Form1.h mit:
Code:
Form2^ form2 = gcnew Form2(this);
form2->Show();
Code:
Form2^ form2 = gcnew Form2(this);
form2->Show();
Code:
Form2^ form2 = gcnew Form2(this);
form2->Show();
ein neues Objekt. Dazu habe ich die Form2.h in der Form1.h includet. Geht auch super! Möchte mit this einen Zeiger auf Form1 übergeben.
In Form2.h mein Konstruktor und die Deklaration von fm1:
Jetzt meckert der Compiler das Form1 nicht definiert ist, ist mir schon klar, aber ein #include "Form1.h" bringt auch nichts. Was muss ich machen?
Hab auch schon die tuts hier gelesen, komm aber nicht weiter. Verwende VS 2005 PE
Danke
Hab jetzt selber eine "Lösung" gefunden. Wenn man in der Form2.cpp die Form1.h includet kann man dort z.B. Form1^ fm ohne Probleme deklarieren.
Aber wieso geht das nicht einfach in der Form2.h??????????????
Kommt immer:
Fehler 1 error C2065: 'Form1': nichtdeklarierter Bezeichner
Wo muss man die Form1.h includen damit ich auch in der Form2.h daraufzugreifen kann?
Die Lösung findest Du im Grundlagenbuch und bei der Suche nach dem Begriff Forwärtsdeklarationen. Lernarbeit nimmt Dir keiner ab. Es gab hier auch schon viele Beiträge zu diesem Thema.
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace test {
/// <summary>
/// Zusammenfassung für Form2
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
ref class Form1;
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(Form1^ fm)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
fmzeiger = fm;
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace test {
/// <summary>
/// Zusammenfassung für Form2
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
ref class Form1;
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(Form1^ fm)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
fmzeiger = fm;
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace test {
/// <summary>
/// Zusammenfassung für Form2
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
ref class Form1;
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(Form1^ fm)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
fmzeiger = fm;
}
Wie gesagt, beschäftige Dich mal ernsthaft mit Vorwärtsdeklaration, such mal im Forum und beschäftige Dich mal mit der Trennung von Definition und Deklaration.
Es ist zwar ein wenig Arbeit, aber das Wissen ist unumgänglich und selbst erarbeitet Wertvoll. Die Frage von Dir zeigt aber zumindest, das Du Dich noch nicht wirklich damit beschäftigt hast.
Also hab keine Ahnung was du meinst wie es gehen könnte. Vielleicht geht es ja so nicht wie ich mir es vorstelle. Kenne zwar die drei anderen Möglichkeiten um auf das gleiche Ergebniss zu kommen, aber so gehts wohl nicht!
Falls du mit Trennung von Definition und Deklaration meinst das ich die Definition des Button Click Ereignisses in der h datei mach und die Deklaration in der cpp, das kenn ich schon. Da kann ich dann auf meinen Form1 Pointer zugreifen. Aber ich möchte ja nur wissen ob das auch alles nur im Header geht, also ohne etwas in die cpp Datei zu schreiben?
Danke
Zuletzt bearbeitet von mrmiagi0101 am 23:12:44 26.06.2008, insgesamt 1-mal bearbeitet
ich suche jetzt schon seit 2 Tagen etliche Stunden, habe aber noch keine Lösung gefunden.
Man kann eigentlich als beispiel den Quelltext von mrmiagi0101 nehmen.
Ich habe es jetzt endlich hinbekommen, dass keine Compiler-Fehler mehr kommen, indem ich:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include "stdafx.h"
#include "Form2.h"
#include "Form1.h"
using namespace test9;
Mein momentanes Problem besteht aber dadrin, dass jetzt Linker error kommen. Ich kann keine Cpps benutzen und bin gezwungen den kompletten Code in der .h zu schreiben.
Ich wäre sehr dankbar wenn mir jemand einen Tipp geben könnte, wie ich das in der .h zum laufen bekomme.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.