Design Problem
-
Nein, das spielt kein Rolle.
algoint.cpp: class AlgoInt : public Algo<int> { virtual void Step2(int); // <- Deshalb ist die abstrakte Methode nicht definiert { std::cout << "Step2 - int" << std::endl; } };
-
das ist bei mir nicht drin, das Komma!
... das kann es also nicht sein!
-
Verrücktwerd .. schrieb:
algoint.cpp: class AlgoInt : public Algo<int> { virtual void Step2(int); { std::cout << "Step2 - int" << std::endl; } };
-
ja das war ein copy & paste Fehler.
Bei der Klasse AgloInt zeigt er mir noch den Fehler:
denn die folgenden virtuellen Funktionen sind rein innerhalb »AgloInt«:
-
ach hoppla, den code vorhin muss ich ja mit zwei geschlossenen augen angesehen haben. da ist ziemlich vieles falsch!
-
ahha und was sonst noch?
-
Irgendwie hab ich den Eindruck, du kommst mit der Trennung Header/Source nicht zurecht...
//algoInt.h #include "Algo.h" class AlgoInt : public Algo<int> { virtual void Step2(int); // <- Deklaration }; //algoInt.cpp #include "algoInt.h" void AlgoInt::Step2(int) //<- Definition { std::cout << "Step2 - int" << std::endl; }
-
Fehlendes Semikolon, Redefinition von AlgoInt. Ansonsten sollte der Code wohl kompilieren.
-
@Aquae: ja aber genau so habe ich es!
-
Wirklich?
Dein Code vorhin sah aber nicht so aus.
-
das ist jetzt mal der code wie ich ihn verwende:
algo.h template< typename input, typename list, typename output> class Algo { public: /* Constructor */ Algo(); static void calc( input &in, list &lis, output &out) { ... Step2( input(), matrix(), output()); ... Step3( m, list(), output()) ... } protected: /* Destructor */ virtual ~Algo(); virtual void Step2( input, list, output)=0; virtual void Step3( int &m, list, output)=0; private: };
-
algoInt.h: class AggloClusterMeasurement3D : public AlgoInt< int, int, int> { public: /* Constructor */ AlgoInt(); /* Destructor */ virtual ~AlgoInt(); private: virtual void Step2( input, list, output); virtual void Step3( int &m, list, output); };
-
algoint.cpp: void Step2( input, list, output) { .. } void Step3( int &m, list, output) { .. }sodele
-
warum funktioniert das jetzt nicht ??
-
Verrücktwerd .. schrieb:
@Shade Of Mine:
Ich möchte einen Algorithmus entwerfen der abhängig vom Typ, innerhalb ein teilweise anderes Verhalten aufweist. Weiterhin sollen eben andere Typen diesen Algorithmus verwenden können, dadurch, dass diese Verhalten implmenetiert wird.
Steht der Typ schon zur Compilezeit oder erst zur Laufzeit fest?
-
Verrücktwerd .. schrieb:
algoint.cpp: void Step2( input, list, output) { .. } void Step3( int &m, list, output) { .. }sodele
Dabei handelt es sich z.B. um freie Funktionen.
-
@vielleicht auch das hier:
Dabei handelt es sich z.B. um freie Funktionen.
Was heisst das jetzt?
@die frage:
steht schon zur Compilezeit fest.
-
Verrücktwerd .. schrieb:
ja das war ein copy & paste Fehler.
Oh mein Gott wie ich Leute hasse die nichtmal fähig sind Copy & Paste zu machen, sondern ihren Code abtippen, und dann Fehler reinbauen. ARGH!
Wie soll das bitte ein Copy & Paste Fehler gewesen sein? Hat dein Clipboard ein Loch, durch das aus der Buchstabenzuleitung zur Tastatur dann ein Semikolon in den Text gefallen ist?
-
An dem zuletzt gezeigtem Code stimmt auch fast gar nichts mehr.
eher dann so.
Ich habe hier das gefühl, dass der OP ein wenig jenseits seiner Kenntnisse arbeitet. Vielleicht wäre etwas Leichteres angebracht.
// algo.h template< typename input, typename list, typename output> class Algo { public: /* Constructor */ Algo() {} protected: /* Destructor */ virtual ~Algo() {} virtual void Step2( input, list, output)=0; virtual void Step3( int &m, list, output)=0; private: }; //algoint.h class AggloClusterMeasurement3D : public Algo< int, int, int> { public: /* Constructor */ AggloClusterMeasurement3D() {} /* Destructor */ virtual ~AggloClusterMeasurement3D() {} private: virtual void Step2( int, int, int); virtual void Step3( int &m, int, int); }; // algoint.cpp void AggloClusterMeasurement3D::Step2( int, int, int) { std::cout << "Step2 - int" << std::endl; } void AggloClusterMeasurement3D::Step3( int &m, int, int) { std::cout << "Step3 - int" << std::endl; }
-
ja was soll ich sagen, eigentlich hat es gleich zwei Löcher