Problem z szablonami
Ostatnio zmodyfikowano 2009-11-14 14:31
mephisto Temat założony przez niniejszego użytkownika |
Problem z szablonami » 2009-11-14 11:09:18 Witam, mam problem z szablonem. Kompilator rzuca komunikat o bledzie cannot convert from 'mephi::Conversion<T> *' to 'mephi::AbstractConversion<T> *' tylko nie wiem dlaczego on nie potrafi tego skonwertowac. Prosze o pomoc jesli ktos wie w czym lezy problem. Ponizej zamieszczam kod. Za kazda sluszna uwage z gory dziekuje. #include <cstdlib> #include<iostream> #include<string> using namespace std;
namespace mephi { template < class T > class AbstractConversion { public: AbstractConversion() { }; AbstractConversion( const AbstractConversion & obj ) { }; ~AbstractConversion() { }; virtual void readFromFile( string fileName ) = 0; virtual void writeToFile( string fileName ) = 0; virtual void removeDuplicates() = 0; AbstractConversion & operator =( const AbstractConversion & obj ) { }; }; template < class T > class Conversion : public AbstractConversion < class T > { public: Conversion() { }; Conversion( const Conversion & obj ) { }; ~Conversion() { }; virtual void readFromFile( string fileName ) { }; virtual void writeToFile( string fileName ) { }; virtual void removeDuplicates() { }; Conversion & operator =( const Conversion & obj ) { }; }; }
int main( int argc, char * argv[] ) { try { using namespace mephi; AbstractConversion < string >* conversion = new Conversion < string >(); if( conversion ) { cout << "usuwam pointer to conversion" << endl; delete conversion; conversion = NULL; } } catch(...) { } system( "PAUSE" ); return 0; } |
|
Elaine |
» 2009-11-14 13:30:33 Hmmm... class Conversion : public AbstractConversion < class T > Nie ma być przypadkiem: class Conversion : public AbstractConversion < T > ? Parę innych spraw: 1. Te średniki po definicjach metod są akurat średnio potrzebne ;) 2. Jeśli konstruktor demyślny, k. kopiujący i destruktor mają być puste, to nie ma sensu ich robić, kompilator zrobi to sam. 3. Ja bym uczynił destruktor AbstractConversion<T> wirtualnym. 4. Stringi powinny być przekazywane przez const ref (const string&), aby uniknąć kopiowania. |
|
mephisto Temat założony przez niniejszego użytkownika |
» 2009-11-14 14:01:05 Masz absolutna racje :)
Dzieki.
ad1. Dalem sredniki bo robilem ten plik na szybko bo te szablony mam w osobnych plikach
ad.2 co do konstruktorow to tez z tego wynika bo one puste nie beda a chcialem pokazac tylko to co mi nie dziala
ad.3 Masz racje ale tutaj chyba jak nie bedzie wirtualnego desktruktora to nic sie nie straci bo ta abstrakcyjna klasa nie ma zadnych zasobow
ad. 4 co do stringow masz racje
W kazdym razie dziekuje za fachowe uwagi.
Pozdro
|
|
Elaine |
» 2009-11-14 14:31:57 3. Ale inne klasy mogą mieć, a wtedy może się zdarzyć zonk. |
|
« 1 » |