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();
    };
    #endif
    

    main.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)


Anmelden zum Antworten