Probleme mit eigener Bibliothek

Hallo Leute!

Ich habe eben versucht eine eigene Arduino-Lib zu erstellen. Das hat soweit auch alles gut funktioniert wenn ich jetzt aber meine Lib einbinden will bekomme ich folgende Fehlermeldung:

Arduino: 1.6.12 (Windows 7), Board: "Arduino/Genuino Uno"

In file included from C:\Users\Pandawal\Desktop\Test\Test.ino:1:0:

C:\Users\Pandawal\Documents\Arduino\libraries\Bepflanzung/Bepflanzung.h:1:0: error: unterminated #ifndef

#ifndef Bepflanzung_h

^

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Hier der Code für die Headerdatei:

#ifndef Bepflanzung_h
#define Bepflanzung_h
#include <Arduino.h>

class Bepflanzung
{
  private:
    String pflanze;
    float feuchtigkeit;
    float phwert;  
    String empfindlichkeit;
    String wasserbedarf;
    String bemerkung;
  
  public:
    Bepflanzung();
    String get_pflanze();
    float get_feuchtigkeit();
    float get_phwert();
    String get_empfindlichkeit();
    String get_wasserbedarf();
    String get_bemerkung();  
    float get_maxfeuchtigkeit();
    float get_minfeuchtigkeit();
    float get_maxphwert();
    float get_minphwert();
  
    void set_pflanze(String);
    void set_feuchtigkeit(float);
    void set_phwert(float);
    void set_empfindlichkeit(String);
    void set_wasserbedarf(String);
    void set_bemerkung(String);  
  
}

Und der Code für die cpp Datei:

#include "Bepflanzung.h"
#include <Arduino.h>
//------------------------------------------------------------
//------------------------------------------------------------

Bepflanzung::Bepflanzung()
{
  pflanze=(" ");
  feuchtigkeit=50.0;
  phwert=7.0;
  empfindlichkeit=1;
  wasserbedarf=2;
  bemerkung=(" ");
}
//------------------------------------------------------------
//------------------------------------------------------------

String Bepflanzung::get_pflanze()
{
  return pflanze;
}
//------------------------------------------------------------

float Bepflanzung::get_feuchtigkeit()
{
  return feuchtigkeit;
}
//------------------------------------------------------------

float Bepflanzung::get_phwert()
{
  return phwert;
}
//------------------------------------------------------------

String Bepflanzung::get_empfindlichkeit()
{
  return empfindlichkeit();
}
//------------------------------------------------------------

String Bepflanzung::get_wasserbedarf()
{
  return wasserbedarf();
}
//------------------------------------------------------------

String Bepflanzung::get_bemerkung()  
{
  return bemerkung;
}
//------------------------------------------------------------

float Bepflanzung::get_maxfeuchtigkeit()
{
  return feuchtigkeit;
}
//------------------------------------------------------------

float Bepflanzung::get_minfeuchtigkeit()
{
  return feuchtigkeit;
}
//------------------------------------------------------------

float Bepflanzung::get_maxphwert()
{
  float erg;
  
  if (empfindlichkeit=="empfindlich")
  {
    if (phwert<=13.5)
      erg=phwert+0.5;
    else
      erg=14.0;
  }
  
  if (empfindlichkeit=="normal")
  {
    if (phwert<=13.0)
      erg=phwert+1.0;
    else
      erg=14.0;
  }
  
  if (empfindlichkeit=="robust")
  {
    if (phwert<=12.5)
      erg=phwert+1.5;
    else
      erg=14.0;
  }

  return erg;
}
//------------------------------------------------------------

float Bepflanzung::get_minphwert()
{
  float erg;
  
  if (empfindlichkeit=="empfindlich")
  {
    if (phwert>=0.5)
      erg=phwert-0.5;
    else
      erg=0.0;
  }

  if (empfindlichkeit=="normal")
  {
    if (phwert>=1.0)
      erg=phwert-1.0;
    else
      erg=0.0;
  }
  
  if (empfindlichkeit=="robust")
  {
    if (phwert>=1.5)
      erg=phwert-1.5;
    else
      erg=0.0;
  }

  return erg;
}
//------------------------------------------------------------
//------------------------------------------------------------

void Bepflanzung::set_pflanze(String bez)
{
  pflanze=bez;  
}
//------------------------------------------------------------

void Bepflanzung::set_feuchtigkeit(float fw)
{
  feuchtigkeit=fw;  
}
//------------------------------------------------------------

void Bepflanzung::set_phwert(float ph)
{
  phwert=ph;
}
//------------------------------------------------------------

void Bepflanzung::set_empfindlichkeit(String empf)
{
  empfindlichkeit=empf;  
}
//------------------------------------------------------------

void Bepflanzung::set_wasserbedarf(String wb)
{
  wasserbedarf=wb;  
}
//------------------------------------------------------------

void Bepflanzung::set_bemerkung(String bem) 
{
  bemerkung=bem;
}
//------------------------------------------------------------
//------------------------------------------------------------

Kann mir von euch jemand sagen wo mein Fehler liegt?

MfG Pandawal

Der Fehler steht doch dort:

unterminated #ifndef

Danach kann man googeln!

Da fehlt ein #endif am Ende

Das mit dem String zum Setzen eines Status oder Zustands ist nicht schön. Für sowas gibt es z.B. enums. Das sind Integer-Konstanten mit sprechenden Namen

Selbst wenn, dann übergibt man Objekte immer als Referenz:

void set_empfindlichkeit(String&);

Das nicht zu tun ist kein Fehler aber Speicher- und Zeitverschwendung

Hier noch der Sketch dazu den habe ich eben vergessen:

#include <Bepflanzung.h>
#include <Arduino.h>

Bepflanzung otto;
  
void setup() {
  Serial.begin(9600);
  while(!Serial);
  Serial.println("Programm wird gestartet"); 


  otto.set_pflanze("Tomate");
}

void loop() {
  Serial.println(otto.get_pflanze());
  delay(1000);

}

Serenifly:
Der Fehler steht doch dort:Danach kann man googeln!

Das stimmt, wenngleich das ein etwas unfreundlicher Hinweis ist. Ich vermute, dass man bei der Suche nach #endif ein paar Milliarden Treffer landet.

Serenifly:
Da fehlt ein #endif am Ende

Das ist allerdings freundliche Hilfe.

Serenifly:
Das mit dem String als Vergleichswert ist nicht schön. Für sowas gibt es z.B. enums

Wenn man enums nicht kennt, ist das mit dem String schön genug :slight_smile:

Gruß

Gregor

Ich vermute, dass man bei der Suche nach #endif ein paar Milliarden Treffer landet.

Danach wird ja auch nicht gegoogelt! Sondern nach "unterminated #ifndef". C++ Fehlermeldungen sind zum Teil etwas kryptisch, aber sie sind mehr oder weniger standardisiert.

Super danke hat funktioniert Fehler ist weg.
Mit dem enum hast du recht bin noch nicht so lange in der Materie C++ da vergesse ich ab und an was für Möglichkeiten ich habe bzw. was ich wann am besten anwende.

Jetzt bringt er aber eine neue Fehlermeldung:

error: expected initializer before 'otto'

Bepflanzung otto;

den Sketch habe ich oben hochgeladen.
Hab ich irgendwo einen Fehler in der Syntax? Ich kann jedenfalls nichts finden.

Gruß Pandawal

Serenifly:
Danach wird ja auch nicht gegoogelt! Sondern nach "unterminated #ifndef".

Und Du glaubst, dass das einen Unterschied macht?

Gruß

Gregor

Und Du glaubst, dass das einen Unterschied macht?

Anders also du habe ich es ausprobiert.

error: expected initializer before 'otto'

Bepflanzung otto;

Im Header fehlt das Semikolon am Ende der Klassen-Deklaration

Danke nochmals hatte es eben auch gefunden :slight_smile: .

Serenifly:
Anders also du habe ich es ausprobiert.

Du hast recht. Der Unterschied ist beträchtlich.


:wink:

Gregor