Hallo Community, ich habe ein Problem ein Template auf meinen Arduino UNO umzusetzen. Und erbitte hiermit um Rat von euch. ---------------------------------------------------------------------- //TemplateClass2.ino #include "Header.h" void setup() { // put your setup code here, to run once: Serial.begin(9600); } //Instanz anlegen Schatztruhe <int> EineTruhe; void loop() { //FEHLER? WARUM? EineTruhe.setSchatz(12); //Und wieder ???? Serial.println( EineTruhe.getSchatz() ) ; delay(750); } --------------------------------------------------------------------- //Header.h #include"Arduino.h" #ifndef HEADER_H #define HEADER_H template <typename T> class Schatztruhe { private: T schatz; public: void setSchatz(T In); T getSchatz(); }; #endif ---------------------------------------------------------------- //Code.cpp #include"Header.h" template <typename T> void Schatztruhe<T>::setSchatz(T In) { schatz = In; } template <typename T> T Schatztruhe<T>::getSchatz() { return schatz; } ----------------------------------------------------------------- Fehlermeldung Arduino IDE Arduino: 1.6.1 (Windows 7), Platine: "Arduino Uno" TemplateClass2.cpp.o: In function `loop': C:\Program Files (x86)\Arduino/TemplateClass2.ino:12: undefined reference to `Schatztruhe<int>::setSchatz(int)' C:\Program Files (x86)\Arduino/TemplateClass2.ino:14: undefined reference to `Schatztruhe<int>::getSchatz()' collect2.exe: error: ld returned 1 exit status Fehler beim Kompilieren. Gruß Meik
:
Bearbeitet durch User
Kleiner Anhang noch. Alles in die X.ino und es läuft!? -------------------------------------------------------- void setup() { // put your setup code here, to run once: Serial.begin(9600); } template <typename T> class Schatztruhe { private: T schatz; public: void setSchatz(T s) { this->schatz=s; } T getSchatz() { return this->schatz; } }; void loop() { Schatztruhe <unsigned int> Zahl; Schatztruhe <boolean> Bool; Bool.setSchatz(true); Zahl.setSchatz(1); while(true) { Serial.print("Zahl= "); Serial.println(Zahl.getSchatz()); Zahl.setSchatz( (Zahl.getSchatz()) +1); Serial.print("Bool= "); Serial.println(Bool.getSchatz()); delay(750); } } -------------------------------------------------------------- So funktioniert es Anstandslos!!!
:
Bearbeitet durch User
Templates kannst du nicht in einer Quellcode-Datei definieren, sondern nur im Header. Wie soll das denn gehen? Wie sonst soll der Kompiler die Methoden für den einen Typ generieren, wenn er den Code nicht kennt. Wenn du das nicht verstehst solltest du dir den Kompilieren-Linken Vorgang genauer ansehen.
Erstmal Danke für die schnelle Antwort. ;) Wie du mir das gerade erklärst macht das schon,auch für mich Hobby-Informatiker, Sinn. Soweit ich das mit der Aufteilung von den Modulen verstanden habe (ACHTUNG LAIE!). Da diese getrennt Kompiliert werden oder die x.cpp auch nur kompilert vorliegt. Können die Methoden die zu Übergebenen Daten(Typen) noch gar nicht kennen "Die sitzen ja auch nicht mit der Glasskugel auf dem Rummel ;)"! Ich verstehe!!! Dann dient der Syntax denn ich aus Fachliteratur habe. Wohl ausschließlich dazu. Alles zwar in der selbe Header.h zuschreiben. Aber Deklaration und Definition zu trennen. //Header.h template <T> class Schatztruhe { //Deklaration }; template<T> X Schatztruhe<T>::X() { //Definition } SUPER!!! Ich wünsche noch ein schönes Wochenende!
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.