Forum: Compiler & IDEs klasse in klasse


von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

ich bin mir grad garnicht sicher ob die Frage die ich habe überhaupt in 
dieses Forum gehört. Aber ich stelle Sie mal trotzdem :)

Ich möchte in C++ ein Programm schreiben welches sich aus mehreren 
Hardware-Modulen zusammen setzt. Je nachdem welche parameter ich am 
Programmstart festlege soll sich das Programm aus den entsprechenden 
Hardware Modulen zusammen setzen ( beispielsweise USART+I2C oder USART + 
USB oder was auch immer).

Dazu lege ich ein Objekt an, welches aus mehreren Objekten besteht.

Das I2c-Objekt hat einen übergabe-Parameter für den constructor.


Folgender Quelltext wird anstandslos kompiliert.
1
class testklasse
2
  {
3
    private:
4
5
    public:
6
      
7
      testklasse();
8
      USARTObject USARTabc;
9
      I2cObject I2Cabc( /* 0xAA */ );  
10
  };

Der jetzt folgende Quelltext wird nihct kompiliert. Es kommen die 
Fehlermeldungen:

-expected identifier before numeric constant
und
-expected ',' or '...' before numeric constant
1
class testklasse
2
  {
3
    private:
4
5
    public:
6
      
7
      testklasse();
8
      USARTObject USARTabc;
9
      I2cObject I2Cabc( 0xAA  );  
10
  };

Mir ist ja bekannt, dass ich laut c++ spec. variablen beim anlegen in 
Objekten nihct gleich einen Wert zuweisen kann, sondern dass im 
constructor machen muss, aber gilt das auch für objekte??

Ich benutze RowleyCrossworks auf einem STM32

Für Hilfe wäre ich echt dankbar.

Grüße Tarkan

von engelmarkus (Gast)


Lesenswert?

Du kannst tatsächlich nur einen Zeiger (I2cObject* I2Cabc;) da erstellen 
und dann im Konstruktor per "new" das neue Objekt erzeugen. Das musst du 
dann natürlich im Destruktor wieder freigeben...

von ... (Gast)


Lesenswert?

[c]
class testklasse
{
  private:
    USARTObject USARTabc;
    I2cObject I2Cabc;
  public:
    testklasse() : I2Cabc(0xAA);
};
[/]

von ... (Gast)


Lesenswert?

Ooops
1
class testklasse
2
{
3
  private:
4
    USARTObject USARTabc;
5
    I2cObject I2Cabc;
6
  public:
7
    testklasse() : I2Cabc(0xAA);
8
};

von Matze T. (gruetzwurschd)


Lesenswert?

Also nach einigen herumprobieren hat sich folgende Schreibweise als 
richtig erwiesen :)
1
class testklasse
2
  {
3
    private:
4
      I2cObject I2Cabc;
5
      USARTObject USARTabc;
6
    public:
7
      testklasse();
8
  };
9
10
11
12
13
   
14
testklasse::testklasse() : I2Cabc(0xAA)
15
  {
16
    //
17
  }


zumindest lässt sich diese schreibweise anstandslos kompilieren! :)

Grüße Tarkan

PS: was mache ich wenn ich mehrere Objekte mit übergabeparameter 
innerhalb einer klasse erzeugen will ? :)

von eugler (Gast)


Lesenswert?

Kannst Du nicht den Konstruktor überladen?

von Rolf Magnus (Gast)


Lesenswert?

Tarkan D. schrieb:
> PS: was mache ich wenn ich mehrere Objekte mit übergabeparameter
> innerhalb einer klasse erzeugen will ? :)

Das gleiche?

von ... (Gast)


Lesenswert?

Tarkan D. schrieb:
> PS: was mache ich wenn ich mehrere Objekte mit übergabeparameter
> innerhalb einer klasse erzeugen will ? :)

Einfach mit Komma dahinter hängen:
1
testklasse::testklasse()
2
  : obj1(0x01)
3
  , obj2(0x02)
4
  , obj3(0x03)
5
{
6
  // ...
7
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.