mikrocontroller.net

Forum: Compiler & IDEs C++ Array von Objekten im Konstruktor initialisieren


Autor: Johannes S. (jojos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein ein Array von Objekten ohne Defaultkonstruktor. Wenn ich 
dieses jetzt als Member einer Klasse verwende muss die Initialisierung 
ja in den Konstruktor rein, aber da meckert der Compiler. Wie geht das 
richtig?
class Keyboard {
public:
  Keyboard();

private:
  DigitalIn  btnOk;
  DigitalIn  btn[12];
};

Keyboard::Keyboard() :
  btnOk(P0_8),  // ok
  btn[0](P0_8), // error: expected unqualified-id before '[' token
  btn[1](P0_5)
{
}

: Bearbeitet durch User
Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Keyboard::Keyboard() :
  btnOk(P0_8),  // ok
  btn { P0_8, P0_5 }
{
}

Beitrag #5167908 wurde vom Autor gelöscht.
Autor: Johannes S. (jojos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, klappt.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte, gern ;-)

Autor: Johannes S. (jojos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Compiler hat nur als Warning angemerkt das die extended initializer 
minimum C++11 ist, hat es aber trotzdem übersetzt.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes S. schrieb:
> Der Compiler hat nur als Warning angemerkt das die extended
> initializer
> minimum C++11 ist, hat es aber trotzdem übersetzt.
Wenn du dem Compiler -std=c++11 übergibst, verschwindet die Warnung und 
du erhältst noch diverses weitere praktische C++11-Funktionalität, oder 
gleich -std=c++14 für die aktuelle C++-Version.

Autor: Johannes S. (jojos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt C++11 eingestellt, der interessante Nebeneffekt ist: die 
generierte Codesize ist von 9400 auf 8744 Bytes geschrumpft!

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann sein dass da einiges mit Initialisierung und constant expressions, 
auch bei verwendeten libs, optimiert wird. C++11 bietet da einige gute 
Möglichkeiten, wie man seine Programme verbessern kann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.