Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » bidirektionale Beziehung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.02.2006, 16:21 Uhr
Lensflare



Hallo.

Ich schreibe gerade an einem Programm, in dem sich mehrere Objekte gegenseitig "ansprechen" können müssen.

Ich weiss aber nicht wie ich das realisieren soll, denn:
damit ich ein Objekt A ansprechen kann, muss dieses in in einem anderen Objekt B als Attribut drin sein. Dann kann aber Objekt A nicht Objekt B ansprechen.

Ich habe bei jemandem nachgefragt, der mit C++ programmiert und er meinte dass das mit QT mit Hilfe von Slots und Signalen funktioniert. Er weiss jedoch nicht wie man das anders umsetzen kann.

Ich gehe davon aus, dass das keine Frage der Programmiersprache ist, solange diese Objektorientiert ist. Aber falls doch, ich programmiere mit Delphi 2005 mit der Sprache C#

Danke schonmal...
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 09.02.2006 um 16:22 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.02.2006, 16:34 Uhr
Pler
Einer von Vielen
(Operator)


Also mir fällt da auf anhieb gemeinsam genutzer Speicher ein. Oder Signale. Wäre aber alles Betriebssystemspezifisch.
Für Windows bietet da die WinApi einiges.
Event, Mutex
Stichwort: Interprozesskommunikation.
(Geht ja auch wenn eigentlich beide Objekte im gleichen Prozess sind.)

Eine einfach Lösung wäre auch, ein drittes (bzw erstes) Objekt zu erstellen. Und eine Referzenz auf dieses Objekt an die beiden neuen Objekte zu übergeben. Jetzt können beide über dieses dritte Objekt miteinander kommunizieren.

Nachtrag:
Oder noch einfacher:
Du schreibt in beide Objekte einfach eine Methode, die eine Referenz auf das jeweils andere Obkjekt entgegennimmt.
Jetzt erstellst du zuerst die Objekte und übergibst dann jeweils das eine Objekt an das andere.
Schon kannst du aus beiden auf beide zugreifen.

Dieser Post wurde am 09.02.2006 um 16:41 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.02.2006, 16:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja kommt drauf an, du kannst schon sowas machen:


C++:
class B
{
  A *pA;
};

class A
{
  B *pB;
};



sowas funktioniert schon. du musst nur sog. forward-deklaration benutzen:


C++:
class A;

class B
{
  A *pA;
};

class A
{
  B *pB;
};


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.02.2006, 16:45 Uhr
Pler
Einer von Vielen
(Operator)


Ja, stimmt also die Forwarddeklaration brauchst du auf jeden Fall.
Danach kannst du dann wie von mir beschrieben vorgehen.
(Die Forwarddeklaration allein Hilft natürlich auch nicht)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.02.2006, 16:46 Uhr
ao

(Operator)


Es gibt verschiedene Beziehungen, die Objekte untereinander haben können. Um die richtige auszuwählen, muss man wissen, von welchen Objekten wir reden. Also, was sind A und B in der Wirklichkeit, und in welcher Beziehung stehen sie zueinander?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.02.2006, 16:58 Uhr
Lensflare



Danke. Ich probiere das mal.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.02.2006, 17:02 Uhr
Lensflare



@ao:
A und B sind zwei Fenster, wobei jedes fenster auf Interaktion mit dem anderen Fenster reagieren soll.

Zum Beispiel wenn im Fenster A jemand auf einen Button klickt, soll in Fenster B etwas geschehen und umgekehrt.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.02.2006, 22:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann ists sinnvoller einfach dem 2ten fenster das handle des anderen fensters mitzuteilen und dann da drüber nachrichten dem fenster zu schicken.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.02.2006, 16:53 Uhr
Lensflare



das hab ich versucht, aber ich bekomme einen compiler-fehler


C++:
//Klasse des Fensters A (Hauptfenster):
public FensterKlasseB fensterB;

private void button1_Click(object sender, System.EventArgs e)
{
  fensterB = new FensterKlasseB();
  fensterB.Show();
  fensterB.setHauptFensterHandle(this.Handle); //hier übergebe ich das Handle des Fensters A an das Fenster B
}

//Klasse des Fensters B:

public IntPtr hauptFensterHandle; //IntPtr scheint der typ für ein handle zu sein.

public void setHauptFensterHandle(IntPtr h)
{
  hauptFensterHandle = h;
}

private void button1_Click(object sender, System.EventArgs e)
{
  hauptFensterHandle.textBox1.Text = "Test"; //an dieser Stelle meldet der Compiler, dass er textBox1 nicht kennt.
}




Compiler::

[C# Fehler] KindFenster.cs(88): 'System.IntPtr' enthält keine Definition für 'textBox1'



Oder geht das ganz anders?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 11.02.2006 um 17:43 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: