Sorry, aber immernoch das Problem
-
Ich bin es schon wieder. Sorry, aber ich habe jetzt echt alles versucht und ich hänge immernoch an diesem blöden Case. Allerdings ist die Herausforderung diesemal größer, weil ich ein Projekt habe mit einer main.cpp und einer Algorithm.cpp und jeweiligen Header Files.
Aufgaben der main:
Klasse Controller die verschiedene Daten von extern rein bekommt (z.B. int AlgoId, int Mode,...).
Mit diesen verschiedenen sachen muss ich jetz in erster Linie schauen, welcher Algorithmus verwendet wird, so dass dieser in der Algorithm.h ordentlich aufgerufen wird und verwendet werden kann.
Aufgaben der Algorithm:Beinhaltet eine BaseKlasse Algorithm von der verschiedene Algorithmen abgeleitet sind.Die Hauptfunktion in Algorithm ist identify(). diese ist virtuell und wird in den verschiedenen abgeleitetet Algorithmen überschrieben.
Nun will ich von meiner Main aus den entsprechenden Algorithmus aufrufen.
Was ich mir bisher zusammengeflickt habe:main.h:
#ifndef main_h_included #define main_h_included #include <stdio.h> #include <iostream> #include <string> #include "Algorithm.h" class Controller{ public: /// default constructor Controller(); //Controller Konstruktor void controller (int mode, int AlgoId){ int mode = mode; int AlgoId = algoId; algoId = 1; }; //Identifiziert den Algorithmus enum{yuv,nccf,sift} algoId; static Controller* getAlgo(algoId id); /// destructor virtual ~Controller(); }; #endifmain.cpp:
#include "main.h" Controller::Controller() {}; Algo* Controller::getAlgo(algoId id) { Algo* al = NULL; switch(id) { case 0: al = new YUV(); break; case 1: al = new NCCF(); break; case 2: al = new SIFT(); break; } return al; } ; Controller::~Controller() {};Ich weiß echt nicht mehr weiter, was ich falsch mache. Ist mein Gedankengang überhaupt richtig?
Vielen Dank für eure Hilfe
A
-
Du magst nicht zufällig damit rausrücken wo das Problem / der Fehler / ... ist?
EDIT: Oder sollen wir Deinen Code analysieren und hinterher sagen "ja, haste gut gemacht" oder "nein, da und da ist was falsch"?
Nochmal EDIT: Ich sehe schonmal dass Du eine enum hast für die id, im Switch aber integer statt der enum-Konstanten abfragst.
-
Alex179 schrieb:
class Controller{ public: .. //Controller Konstruktor void controller (int mode, int AlgoId){ int mode = mode; int AlgoId = algoId; algoId = 1; } .. };Kleiner Tip: Das da ist kein Konstruktor (sondern eine Memberfunktion, die zufällig einen ähnlichen Namen hat wie die Klasse), außerdem kann sie nicht funktionieren, weil sie zwei verschiedene "mode" und "AlgoID" Variablen deklariert.
Edit: Und ein kleiner Fehler, der sich vermutlich irgendwo unterwegs eingeschlichen hat - die Enum-Deklaration müsste andersrum sein: "enum AlgoID{yuv,nccf,sift};" (andersherum deklarierst du eine Variable "AlgoID" mit einem anonymen enum-Typ)