Forum: Compiler & IDEs Funktion in Classe einbauen !


von Michael K. (seq303)


Angehängte Dateien:

Lesenswert?

Hallo

ich möchte gern die Funktion LED13_Blink in eine Classe verschieben.
Aber leider mache ich da irgenwas falsch. Kann mir da jemand helfen ?

In der INO soll die Funktion Mit_Classe_LED13_BLINK(); aufgerufen 
werden.

Die Funktion Mit_Classe_LED13_BLINK(); soll in der Teensy.cpp stehen.

Und die classe in der Teensy.h Datei

Fehlermeldung ist:

Teensy.cpp: 16:37: error: ISO C++ forbids declaration of 
'Mit_Classe_LED13_BLINK' with no type [-fpermissive]
 TeensyClass*: Mit_Classe_LED13_BLINK()

Teensy.cpp: 16:1: error: prototype for 'int 
TeensyClass::Mit_Classe_LED13_BLINK()' does not match any in class 
'TeensyClass
 TeensyClass*: Mit_Classe_LED13_BLINK()

Teensy.cpp:2: In file included from

Teensy.h: 15:15: error: candidate is: void 
TeensyClass::Mit_Classe_LED13_BLINK()
   void Mit_Classe_LED13_BLINK()
Error compiling project sources

Was muss ich änder damit die Funktion
Mit_Classe_LED13_BLINK();


So funktioniert es leider nicht !

was muss ich ändern damit die Funktion
Mit_Classe_LED13_BLINK();
Loop aufgerufen werden kann.

Danke für eure Hilfe.

MFG Michael

von Wilhelm M. (wimalopaan)


Lesenswert?

1.) C++-Buch besorgen
2.) Lesen
3.) Fehlermeldung des Compilers lesen

von Michael K. (seq303)


Lesenswert?

Ich lese schon komme aber nicht weiter !

habe jetzt ein void vor die Funktion geschrieben!

void Ohne_Classe_LED13_BLINK()
{
  digitalWrite(Teensy.LED13_PIN, LOW);
  delay(200);
  Serial.println("Ohne");
  digitalWrite(Teensy.LED13_PIN, HIGH);
  delay(200);
}

Jetz habe ich das Problem das die Teensy nicht deklariert ist !

In der INO habe ich das gemacht oder ?


TeensyClass      Teensy;

wenn ich in die Funktion Zahlen eintrage gehts !

void Ohne_Classe_LED13_BLINK()
{
  digitalWrite(13, LOW);
  delay(200);
  Serial.println("Ohne");
  digitalWrite(13, HIGH);
  delay(200);
}

Was muss ich machen damit Teensy auch in der Teensy.cpp erkannt wird ?

von asdfg (Gast)


Lesenswert?

Michael K. schrieb:
> Teensy.cpp: 16:37: error: ISO C++ forbids declaration of
> 'Mit_Classe_LED13_BLINK' with no type [-fpermissive]
>  TeensyClass*: Mit_Classe_LED13_BLINK()


Also ein C++ Buch würde wahrscheinlich sehr helfen.

Aber als kleiner Tipp:
Was steht denn in Zeile 16 und was könnte mit "no type" gemeint sein?

von asdfg (Gast)


Lesenswert?

1
TeensyClass::Mit_Classe_LED13_BLINK()
2
{
3
  digitalWrite(Teensy.LED13_PIN, LOW);
4
  delay(200);
5
  digitalWrite(Teensy.LED13_PIN, HIGH);
6
  delay(200);
7
}

Außerdem solltest Du dir nochmal angucken, wie man auf Membervariablen 
(LED13_PIN) innerhalb einer Klasse zugreift.

von Michael K. (seq303)


Lesenswert?

Ich schau mir das gleich mal an!

// Funktionen
void TeensyClass::Mit_Classe_LED13_BLINK()
{
  digitalWrite(LED13_PIN, LOW);
  //digitalWrite(13, LOW);
  delay(200);
  digitalWrite(LED13_PIN, HIGH);
  Serial.println("Mit");
  //digitalWrite(13, HIGH);
  delay(200);
}


wenn ich das so schreibe geht es auch !

digitalWrite(LED13_PIN, LOW);    Ohne Teensy.

Was muss ich machen damit ich

digitalWrite(Teensy.LED13_PIN, LOW); schreiben kann ????

Der Compiler kennt die Classe hier noch nicht

obwohl ich hier #include "Teensy.h"

geschieben habe !

Was muss ich machen ?

von asdfg (Gast)


Lesenswert?

Michael K. schrieb:
> Was muss ich machen damit ich
> digitalWrite(Teensy.LED13_PIN, LOW); schreiben kann ????
> ...
> Der Compiler kennt die Classe hier noch nicht
> obwohl ich hier #include "Teensy.h"
> geschieben habe !

Das solltest Du überhaupt nicht schreiben, jedenfalls nicht in der 
Klassendefinition in Teensy.cpp. Teensy ist in deinem Fall der 
Variablenname und TeensyClass der Datentyp.

Ganz ehrlich, es wirkt als hättest Du absolut keine Ahnung, was Du da 
eigentlich machst. Nimm ein C++ Buch oder meinetwegen auch ein 
youtube-Tutorial und arbeite damit. Wenn Du nur halbwegs verstanden 
hast, was eine Klasse ist und wie man damit umgeht, dann kannst Du alle 
deine Fragen problemlos beantworten.

von Karl Käfer (Gast)


Lesenswert?

Michael K. schrieb:
> Ich schau mir das gleich mal an!
>
> // Funktionen
> void TeensyClass::Mit_Classe_LED13_BLINK()
> {
>   digitalWrite(LED13_PIN, LOW);
>   //digitalWrite(13, LOW);
>   delay(200);
>   digitalWrite(LED13_PIN, HIGH);
>   Serial.println("Mit");
>   //digitalWrite(13, HIGH);
>   delay(200);
> }
>
> wenn ich das so schreibe geht es auch !

Wunder der Technik: kaum macht mans richtig, schon funktionierts. :-)

> Was muss ich machen damit ich
>
1
digitalWrite(Teensy.LED13_PIN, LOW);
> schreiben kann ????

Du meinst, in der Funktion TeensyClass::Mit_Classe_LED13_BLINK()? Da 
kannst Du entweder
1
digitalWrite(LED13_PIN, LOW);

oder
1
digitalWrite(self->LED13_PIN, LOW);

schreiben. Da die Methode "Mit_Classe_LED13_BLINK()" ja eine Methode der 
Klasse TeensyClass ist, kennt sie ihre Membervariable LED13_PIN, kann im 
Zweifelsfalle aber über den Zeiger auf die eigene Instanz "self" auf die 
Membervariablen zugreifen, etwa wenn es eine globale Variable gibt, die 
denselben Namen wie die Membervariable hat.

> Der Compiler kennt die Classe hier noch nicht obwohl
> ich hier #include "Teensy.h" geschieben habe !

Der Compiler kennt die Klasse TeensyClass, aber nicht die Instanz 
Teensy.

> Was muss ich machen ?

In Deinen Beiträgen weniger Leerzeilen verwenden, nicht plenken, und 
C-Code in die korrekten Tags einfassen, siehe "Formatierung" direkt 
oberhalb des Eingabeformulars für Deine Beiträge.

Außerdem möchte ich Dir WÄRMSTENS(!) ans Herz legen, ein Buch über C++ 
wie dieses

https://www.amazon.de/gp/product/3836213850/

oder ein Online-Tutorial für Anfänger durchzuarbeiten. Durcharbeiten 
bedeutet: nicht nur kurz überfliegen, sondern die Beispiele abtippen, 
übersetzen, kleinree Änderungen daran machen und schauen, was Deine 
Änderungen bewirken. Ohne genauer hingeschaut zu haben, sieht dieses 
C++-Tutorial ganz brauchbar aus:

http://www.online-tutorials.net/c-c%2B%2B-c/c%2B%2B-tutorial-teil-1/tutorials-t-1-58.html

von tictactoe (Gast)


Lesenswert?

Karl Käfer schrieb:
> oder
> digitalWrite(self->LED13_PIN, LOW);

Du meinst natürlich
1
digitalWrite(this->LED13_PIN, LOW);

Ist aber nicht üblich; normalerweise lässt man "this->" weg.

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.