C++ - Klassen und structs - Scope probleme

hydra

hydra

praetorian
Grüß euch!

Habe folgendes Problem:

habe eine Klasse A, die ein struct B und wiederum eine Klasse C enthält.
Zusätzlich wird in der Klasse A per default Konstruktor eine Instanz S des structs B erstellt, wodurch die struct members Werte erhalten.

Nun möchte ich aber im Konstruktor der Klasse C auf die Werte der Instanz S zugreifen. Kann das funktionieren und wenn dann wie?

Es folgt der Code dann ist es leichter verständlich:
Code:
//------------------------
class A
{

  //------------------------
  struct B
  {
     int memberB;
     struct(){ memberB = 5;}
  }

  B S;   // Instanz S des structs B

  //------------------------
  class C
  {
      int memberC;
      C();
  }
}

//------------------------
// Konstruktor der Klasse C
A::C::C()
{
      memberC = A::S.memberB; // ?????? wie kann ich auf memberB  von S 
                                           //hier zugreifen (so sicher nicht)
}


Es ist ein Horrorszenario, denn ich muss die Klasse A in dieses bestehende Chaos, dass ich nicht verändern darf, implementieren.

Danke für eure Hilfe.

Lg,

Robin
 
hydra schrieb:
Grüß euch!

Habe folgendes Problem:

habe eine Klasse A, die ein struct B und wiederum eine Klasse C enthält.
Zusätzlich wird in der Klasse A per default Konstruktor eine Instanz S des structs B erstellt, wodurch die struct members Werte erhalten.

Nun möchte ich aber im Konstruktor der Klasse C auf die Werte der Instanz S zugreifen. Kann das funktionieren und wenn dann wie?

Es folgt der Code dann ist es leichter verständlich:
Code:
//------------------------
class A
{

  //------------------------
  struct B
  {
     int memberB;
[B]Sollte das nicht B() { ... \ heißen?[/B]      
struct(){ memberB = 5;}
  }

  B S;   // Instanz S des structs B

  //------------------------
  class C
  {
      int memberC;
      C();
  }
}

//------------------------
// Konstruktor der Klasse C
A::C::C()
{
      memberC = A::S.memberB; // ?????? wie kann ich auf memberB  von S 
                                           //hier zugreifen (so sicher nicht)
}


Es ist ein Horrorszenario, denn ich muss die Klasse A in dieses bestehende Chaos, dass ich nicht verändern darf, implementieren.

Danke für eure Hilfe.

Lg,

Robin
Siehe Code, ansonsten würde Ich sagen das 'C' einen Zeiger oder eine Referenz auf das B-Objekt 'S' brauch. Dann könnte man per memberC = SPtr->memberB oder als Referenz memberC = SRef.memberB schreiben.
 
natürlich sollte der Konstruktor des structs B() heißen, Freudscher Tippfehler ;-) (den wollte ich immer schon einmal einführen)

Diese Überlegungen hab ich auch schon angestellt, nur ist das ein ziemlich murks-lösung, anders gehts aber glaub ich nicht, den es gibt nur den scope operator mit dem man tieferliegendes sichtbar machen kann, aber nicht was darüber liegt...

hat jemand vielleicht eine andere Idee?
 
hallo

wie möchtes du überhaupt auf S zugreifen? es ist ja kein statisches member, so wie ich das sehe, also ohne instanz von A sehe ich da schwarz...

und leider (oder gott sei dank) hat die gekapselte klasse keinen programmtechnischen bezug zur übergeordneten klassen, sie ist lediglich teil des namensraums von A, um den code besser zu ordnen, das war es dann aber auch schon mit der verwandtschaft.

was dein prinzipielles problem mit dem scope operator angeht: nachdem ja die klasse A global ist, kannst du sowieso über A:: ... auf ihre unterklassen bzw. statischen member zugreifen, ganz egal wie tief du drinnen bist...

und ja die lösung sollte nur mit referenz/zeiger möglich sein, sowas sollte aber auch die elegante lösung sein

grüße joe
 

Ähnliche Themen

c++ syntax: iterator fuer struct in template Klasse

C++ Klausur durchgefallen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

smile chat: Eine Mehrbenutzer-Netzwerkanwendung in C++ und Java

Zwei Fragen zu QT

Zurück
Oben