Arduino Object Member Problem

OP (Firma: augilabs) #3046058
Lesenswert?
• ▲
▼
Hallo

es passt eventuell nicht ganz zum GCC Forum, aber ich hoffe trotzdem auf 
Hilfe.

Ich habe eine externe Library (Class zB. EXX) von der möchte ich ein 
private Membervariablein meiner eigenen Klasse anlegen. EXX hat einen 
Constructor EXX::EXX(int pin)

Also in etwa so:

h_File:

....

class MEINE{

...
  double MaxTemp;
  double MinTemp;

static EXX test(10);  <==== ERROR  error: expected ',' or '...' before 
numeric constant
....

}

Falls ich das in meinen cpp File einfüge ist das ok, aber da ist das 
doch keine Membervariable von MEINE
......

.....
static EXX test(10); <===hier ok
...
MEINE:MEINE{

}
....



Kann mir da jemand helfen und sagen, was ich falsch mache?

MfG
Achim
OP (Firma: augilabs) #3046126
Lesenswert?
• ▲
▼
Hallo

ist das nicht was anderes, was ich anstrebe. EXX ist eine fremde Klasse 
und kann in einem Scetch problemlos angelegt werden. Es ist aus meiner 
Sicht ein neuer Datentyp also wie float, int etc. nur eben EXX.

...EXX test(10) ; im Scetch problemlos anlegbar

Ich möchte das aber meiner Klasse anlegen....


Ich möchte meine Klasse nicht von EXX ableiten (MEINE() : EXX(10)) und 
schon gar nicht einen neuen Konstruktor definieren.

Ich möchte das wie ne float oder int als private Membervariable anlegen 
und nutzen. Thema ist doch da Class Objects oder?
Also laut Buch:

....
EXX test;
.....

Achim
#3046179
Lesenswert?
• ▲
▼
Achim A. schrieb:
> Hallo
>
> ist das nicht was anderes, was ich anstrebe.

Inwiefern

> EXX ist eine fremde Klasse
> und kann in einem Scetch problemlos angelegt werden.

Wie ich diesen Begriff hasse.
Du programmierst C++ und nicht irgendwelche Scetche.
Also gelten für dich die Sprachregeln von C++.

> Es ist aus meiner
> Sicht ein neuer Datentyp also wie float, int etc. nur eben EXX.

Ja, passt ja auch

>
> ...EXX test(10) ; im Scetch problemlos anlegbar

Ja, weil das eine Variable, ein Objekt für sich selbst ist. Und dem kann 
man bei der Objekterzeugung einen Initalwert mitgeben.

genauso, wie du in einer FUnktion
1
void foo()
2
{
3
  int i(5);
4
}

einen int anlegst, der bei der Erzeugung intialisiert wird, genauso 
kannst du auch irgendein anderes Objekt anlegen
1
void foo()
2
{
3
  EXX obj(5);
4
}

und es bei der Erzeugung mit einem Wert initialisieren.

>
> Ich möchte das aber meiner Klasse anlegen....
>

Ja, dann mach das.

> Ich möchte meine Klasse nicht von EXX ableiten (MEINE() : EXX(10))

tust du ja auch nicht. Du solltest dein C++ Buch nicht nur anlassbezogen 
zu Rate ziehen, sondern es mal von vorne bis hinten durcharbeiten, damit 
du zumindest die Syntax erkennst, wenn du sie vorgebetet bekommst.

> und
> schon gar nicht einen neuen Konstruktor definieren.

doch. Das wirst du aber müssen.
Denn genau das ist der in C++ vorgesehene Mechanismus, mit dem ein 
Objekt seine Member initialisiert.


> Ich möchte das wie ne float oder int als private Membervariable anlegen
> und nutzen.

Und?
Wie initialisiert man denn eine Membervariable eines Objektes?

schreibst du
1
class meine
2
{
3
  int i_( 5 );
4
};

oder schreibst du
1
class meine
2
{
3
  meine() : i_( 5 ) {}
4

5
  int i_;
6
};

und mit anderen Datentypen ist das auch nicht anders.

Noch ein Hinweis:
Eine Klassendeklaration definiert ja noch kein Objekt. Eine 
Klassendeklaration ist ja nur ein Bauplan, wie ein Objekt aussehen soll. 
Objekte werden zb in Funktionen erzeugt
1
void foo()
2
{
3
  meine jkl;
4
}
und erst da erwacht dann der Mechanismus zum Leben.

Aber mit
1
class meine
2
{
3
  ...
4

5
  EXX mem;
6
};

beschreibst du ja nur, wie so ein 'meine' Objekt prinzipiell aussieht. 
Aber du hast deswegen ja noch kein derartiges Objekt. Erzeugt wird ein 
derartiges Objekt erst hier
1
void foo()
2
{
3
  meine jkl;
4
}
und 'Objekt erzeugen' bedeutet, dass ein Konstruktor abläuft. Daher ist 
der Konstruktor der Code-Platz an der dieses Objekt dann seinerseits 
seine Member initialisiert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.