INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Template in Header-Datei
26.05.2016, 15:54
Beitrag #1
Template in Header-Datei
Hallo zusammen!

Ich steh bei dem Problem template-Funktionen und struct's im Header zu definieren. Ich habe bereits im Internet über dieses Problem gelesen bin daraus aber nicht schlau geworden, wie es nun wirklich im Programm-Code auszusehen hat. Confused
Folgender Code (in diesem Fall eine struct):

Code:
Limit.h

template <typename T>
struct limit {
    T actual; // actual value
    T min; // minimum value
    T max; // maximum value
    void setRange(T min, T max); // setup min and max
    T confine(); // check limit::actual value and return limited value
    T confine(T input); // check parameter value and return limited value
    bool inRange(); // return 1 if the limit::actual value is in range, else return 0
    bool inRange(T input); // return 1 if the parameter value is in range, else return 0
};

Code:
Limit.cpp

template <typename T>
void limit<T>::setRange(T min, T max)
{
    this->min = min;
    this->max = max;
}

template <typename T>
T limit<T>::confine()
{
    return (limit::actual > limit::max) ? (limit::max) : ((limit::actual < limit::min) ? (limit::min) : (limit::actual));
}

template <typename T>
T limit<T>::confine(T input)
{
    return (input > limit::max) ? (limit::max) : ((input < limit::min) ? (limit::min) : (input));
}

template <typename T>
bool limit<T>::inRange()
{
    return (limit::actual > limit::max) ? 0 : ((limit::actual < limit::min) ? 0 : 1);
}

template <typename T>
bool limit<T>::inRange(T input)
{
    return (input > limit::max) ? 0 : ((input < limit::min) ? 0 : 1);
}

Code:
Error:
DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<int>::confine(int)'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<double>::inRange()'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<double>::confine()'

Kann mir jemand bitte helfen?

Mit freundlichen Grüßen,
Scheams Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.05.2016, 20:04
Beitrag #2
RE: Template in Header-Datei
Hallo Scheams,

versuche mal nur die folgende .h - Datei:
Code:
template <typename T>
struct limit {
  T min;
  T max;
  T actual;
  T setRange()
  {
    this->max = max;
    this->min = min;
  }
  T confine()
  {
    return (limit::actual > limit::max) ? (limit::max) : ((limit::actual < limit::min) ? (limit::min) : (limit::actual));
  }
  T confine(T input)
  {
    return (input > limit::max) ? (limit::max) : ((input < limit::min) ? (limit::min) : (input));
  }
  bool inRange()
  {
    return (limit::actual > limit::max) ? 0 : ((limit::actual < limit::min) ? 0 : 1);
  }
  bool inRange(T input)
  {
    return (input > limit::max) ? 0 : ((input < limit::min) ? 0 : 1);
  }
};
Wäre nett wenn du eine Rückmeldung bringst.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.05.2016, 22:03
Beitrag #3
RE: Template in Header-Datei
(26.05.2016 20:04)rkuehle schrieb:  Hallo Scheams,

versuche mal nur die folgende .h - Datei:
....
Wäre nett wenn du eine Rückmeldung bringst.
Grüße Ricardo

...ähm Ricardo, hast du vielleicht vergessen die .h Datei zu benennen ?
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 05:27
Beitrag #4
RE: Template in Header-Datei
Hallo!

Habe deinen Code so mal ausprobiert und es funktioniert. Danke Ricardo! Smile
Ich hab danach auch probiert die Funktionen mit inline zu definieren und in .cpp zu schreiben. Die (struct-)Funktionen funktionieren. Wenn ich jedoch Constructor hinzufüge wird wieder ein Error ausgegeben. Kann man Constructor überhaupt als inline definieren?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 10:26
Beitrag #5
RE: Template in Header-Datei
Moin allerseits,

@Scheams: stelle doch einmal bitte den aktuellen Code und die Fehlermeldungen rein. Alles andere ist ein bisschen wie stochern im Nebel

@BK: Da hier ja nur eine Struktur-/Template Klasse "Limit" geschrieben ist, gehe ich davon aus, dass die Datei "Limit.h" heißt. Smile

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 12:00
Beitrag #6
RE: Template in Header-Datei
(27.05.2016 10:26)rkuehle schrieb:  ....
@BK: Da hier ja nur eine Struktur-/Template Klasse "Limit" geschrieben ist, gehe ich davon aus, dass die Datei "Limit.h" heißt. Smile

Grüße Ricardo

..ah okay....also das ist mir programmiertechnisch zu hoch...da bin ich Fußgänger...
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 15:20
Beitrag #7
RE: Template in Header-Datei
Hi!

Sorry, dachte dass man evtl. ohne Code auskommt. Blush Egal, dann erstmal hier der Code und Fehlermeldung:

Also dieser Code funktioniert:

Code:
.h-File:

template <typename T>
struct limit {
    limit()    { min = 0; max = 0; actual = 0; } // default constructor
    limit(T min, T max)    { this->min = min; this->max = max; actual = 0; } // constructor: setup min and max
    limit(T actual, T min, T max) { this->min = min; this->max = max; this->actual = actual; } // constructor: setup min and max
    ~limit() { delete &actual; delete &min; delete &max; } // destructor
    T actual; // actual value
    T min; // minimum value
    T max; // maximum value
    inline T confine();
    inline T confine(T input);
    inline bool inRange();
    inline bool inRange(T input);
};

Code:
.cpp-File

template <typename T>
inline T limit<T>::confine() { return (limit::actual > limit::max) ? (limit::max) : ((limit::actual < limit::min) ? (limit::min) : (limit::actual)); }

template <typename T>
inline T limit<T>::confine(T input) { return (input > limit::max) ? (limit::max) : ((input < limit::min) ? (limit::min) : (input)); }

template <typename T>
inline bool limit<T>::inRange() { return (limit::actual > limit::max) ? 0 : ((limit::actual < limit::min) ? 0 : 1); }

template <typename T>
inline bool limit<T>::inRange(T input) { return (input > limit::max) ? 0 : ((input < limit::min) ? 0 : 1); }

Dieser hier lässt sich nicht kompelieren und gibt einen Error aus:

Code:
.h-File

template <typename T>
struct limit {
    inline limit(); // default constructor
    inline limit(T min, T max); // constructor: setup min and max
    inline limit(T actual, T min, T max); // constructor: setup min and max
    inline ~limit(); // destructor
    T actual; // actual value
    T min; // minimum value
    T max; // maximum value
    inline T confine();
    inline T confine(T input);
    inline bool inRange();
    inline bool inRange(T input);
};

Code:
.cpp-File

// Dieser Abschnitt ist neu

template <typename T>
inline limit<T>::limit()    { min = 0; max = 0; actual = 0; }

template <typename T>
inline limit<T>::limit(T min, T max)    { this->min = min; this->max = max; actual = 0; }

template <typename T>
inline limit<T>::limit(T actual, T min, T max) { this->min = min; this->max = max; this->actual = actual; }

template <typename T>
inline limit<T>::~limit() { delete &actual; delete &min; delete &max; }

// Gleicher Code mit inline Funktionen wie im Code davor
//... alle Funktionen ...

Code:
Error:

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<int>::~limit()'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<double>::~limit()'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<int>::~limit()'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<int>::limit()'

DATEIPFAD: In function `FUNKTION':

DATEIPFAD: undefined reference to `limit<double>::limit()'

DATEIPFAD: In function `__static_initialization_and_destruction_0':

DATEIPFAD: undefined reference to `limit<double>::limit(double, double)'

@Ricardo & rkuehle: Eigentlich hat Ricardo richtig angesetzt, da die Datei sowieso nicht "Limit.h" heißt. Hab sie nur für diesen Beitrag einfach so benannt. Die struct ist nur Teil eines Programmes bzw. einer Header-File. Big Grin

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 18:03
Beitrag #8
RE: Template in Header-Datei
Hallo Scheams,
mach mal bitte ein #include der .h - Datei in die .cpp - Datei rein.
Dann sollte es klappen.
Grüße Ricardo

PS: rkuehle und Ricardo sind die selben alten Säcke Smile

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  GP2Y0A02YK0F Header und Cpp in der Arduino-IDE einbinden. comfan 1 97 19.10.2016 12:47
Letzter Beitrag: Tommy56
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 490 01.04.2016 05:49
Letzter Beitrag: MartinK
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 341 30.03.2016 16:42
Letzter Beitrag: MartinK
  SD.open() erzeugt keine neue Datei! torsten_156 4 529 11.03.2016 17:31
Letzter Beitrag: Bitklopfer
  Datei von SD an anderen Arduino senden ProgrammierTier 1 543 02.02.2016 09:05
Letzter Beitrag: hotsystems
  Byteweise von Datei einlesen von SD-Karte. arduinofan 8 917 28.10.2015 19:52
Letzter Beitrag: arduinofan
  Header File Problem LeonCorleone 7 966 08.08.2015 13:50
Letzter Beitrag: LeonCorleone
Question Arduino Temperatursensor in exel datei loggen Tom 2 1.220 12.07.2015 10:30
Letzter Beitrag: rkuehle
  .cpp Datei Kyrill 4 803 19.02.2015 09:32
Letzter Beitrag: Thorsten Pferdekämper
  Daten aus csv Datei auf RPi zur Motorregelung Hann1bal 3 933 05.01.2015 13:18
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste