pointhi
Erfahrenes Mitglied
Hy, ich hatte schon mal eine Thread hier wegen einem ähnlichen problem. Ich hab die gesammte Klasse neu geschrieben, und setze dabei auch neue methoden ein um das gewünschte Ziel zu erreichen.
Ich hab den Sourcecode des aktuellen statuses auf GitHub zur Verfügung gestellt, und beziehe mich auf diesen.
Hier eine kleine erklärung von dem was ich mir vorgestellt habe:
Baseclass ist eine abstrakte klasse um grundlegende variablen und funktionen zu deklarieren die programmweit nutzbar sein sollen.
TreeHandler ist die Template-Implementierung von der abstrakten Klasse "Baseclass", ich hätte die Funktionen in die einzelnen klassen hineinschreiben können, dann würde es wohl schon funktionieren, aber ich will redundanz so gut wie möglich vermeiden. Das Problem liegt vermutlich bei dieser Klasse
MainHandler ist die Grundklasse von der sich der Baum aufbaut.
Hardware::Hardware
Hardware::I2cSlave::I2cSlave Das sind klassen die dafür sorgen sollen dass im Baum nur bestimmte Elemente aufgenommen werden dürfen. Ich hab eine kleine Grafik gezeichnet die das ilustrieren soll:
Hardware::I2c
Hardware::I2cSlave::Slave Das sind die Klassen die später die arbeit durchführen. Es soll möglich sein dass man andere klassen mit einem ähnlichen Aufgabenbereich erstelllt. Z.b. Hardware::Rs232, oder Hardware::Can, die dann von den dazugehörigen Elternklassen eingebunden werden können.

Dabei darf die Elternklasse nur bestimmte Kindklassen erben.
Ich hab auch eine Grafik mit meiner aktuellen implementierung gemacht:

Das ganze wird meines wissens auch Abstrakte Fabrik genannt, ich hab aber keine Implementationen davon gefunden die für mich nutzbar sind.
Eine möglicher Aufbau eines fertigen Baumes könnte schließlich so aussehen:

Ich hoffe ihr könnt mir helfen, ich will wenn möglich keine redundante codebasis aufbauen, sondern eine flexible (Template)-Klasse die sich für navigations-Funktionen kümmert.
Hier ein codestück das zum testen der klasse gedacht ist:
Es treten danach folgende Fehlermeldungen auf:
Wenn ich dann die Funktin NewItem deaktiviere funktioniert das compilieren. Ich schätze dass das problem an der Typenübergabe oä. liegt.
mfg, pointhi
Ich hab den Sourcecode des aktuellen statuses auf GitHub zur Verfügung gestellt, und beziehe mich auf diesen.
Hier eine kleine erklärung von dem was ich mir vorgestellt habe:
Baseclass ist eine abstrakte klasse um grundlegende variablen und funktionen zu deklarieren die programmweit nutzbar sein sollen.
TreeHandler ist die Template-Implementierung von der abstrakten Klasse "Baseclass", ich hätte die Funktionen in die einzelnen klassen hineinschreiben können, dann würde es wohl schon funktionieren, aber ich will redundanz so gut wie möglich vermeiden. Das Problem liegt vermutlich bei dieser Klasse
MainHandler ist die Grundklasse von der sich der Baum aufbaut.
Hardware::Hardware
Hardware::I2cSlave::I2cSlave Das sind klassen die dafür sorgen sollen dass im Baum nur bestimmte Elemente aufgenommen werden dürfen. Ich hab eine kleine Grafik gezeichnet die das ilustrieren soll:
Hardware::I2c
Hardware::I2cSlave::Slave Das sind die Klassen die später die arbeit durchführen. Es soll möglich sein dass man andere klassen mit einem ähnlichen Aufgabenbereich erstelllt. Z.b. Hardware::Rs232, oder Hardware::Can, die dann von den dazugehörigen Elternklassen eingebunden werden können.

Dabei darf die Elternklasse nur bestimmte Kindklassen erben.
Ich hab auch eine Grafik mit meiner aktuellen implementierung gemacht:

Das ganze wird meines wissens auch Abstrakte Fabrik genannt, ich hab aber keine Implementationen davon gefunden die für mich nutzbar sind.
Eine möglicher Aufbau eines fertigen Baumes könnte schließlich so aussehen:

Ich hoffe ihr könnt mir helfen, ich will wenn möglich keine redundante codebasis aufbauen, sondern eine flexible (Template)-Klasse die sich für navigations-Funktionen kümmert.
Hier ein codestück das zum testen der klasse gedacht ist:
C++:
SensorHandler::MainHandler TestObject;
std::cout << "Count: " << TestObject.GetItemCount() << std::endl;
Es treten danach folgende Fehlermeldungen auf:
Code:
main.cpp:27:31: Fehler: Variable ?TestObject? kann nicht als vom abstrakten Typ ?SensorHandler::MainHandler? deklariert werden
In file included from main.cpp:11:0:
../SensorHandler/include/SensorHandler.hpp:109:10: Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb ?SensorHandler::MainHandler?:
In file included from main.cpp:11:0:
../SensorHandler/include/SensorHandler.hpp:35:20: Anmerkung: virtual void SensorHandler::Baseclass::NewItem(std::string, std::tr1::shared_ptr<SensorHandler::Baseclass>)
Wenn ich dann die Funktin NewItem deaktiviere funktioniert das compilieren. Ich schätze dass das problem an der Typenübergabe oä. liegt.
mfg, pointhi
Zuletzt bearbeitet von einem Moderator: