pajofego
2006-11-06, 22:26:22
Hallo miteinander,
ich mal wieder und meine Versuche mir das C++ beizubringen.
Ich habe eine Basisklasse(abstrakte Klasse), in der steht da jetzt nicht viel drin.
template <class T>
class clClass
{
protected:
virtual void Init(const T& value) = 0;
virtual void Delete() = 0;
virtual void CopyValues(const clClass<T>& scr) = 0;
public:
clClass(void){};
virtual ~clClass(void){};
virtual const T& operator[](int i) const = 0;
};
Von dieser Klasse erbe ich jetzt folgende. Hier nur die Methode, mit der ich das Problem habe:
#include "clClass.h"
template <class T>
class clVector : public clClass<T>
{
protected:
//...mehr code
virtual void CopyValues(const clVector<T>& scr)
{
#ifdef _DEBUG
cout << "Laenge des Vektors: " << scr.GetLength() << endl;
#endif
if(m_iLength == scr.GetLength())
for(int i = 0; i<m_iLength; i++)
m_pVector[i] = scr[i];
else
{
cerr << "Vektorlaenge stimmen nicht ueberein!" << endl;
exit(1);
}
};
public:
//... mehr code
};
Versuche ich das ganze zu compilieren, bekomme folgende Fehlermeldung:
Fehler 1 error C2259: 'clVector<T>': Instanz von abstrakter Klasse kann nicht erstellt werden c:\eigene dateien\vspr2005\noc_2d\noc_2d\noc_2d.cpp 18
Aus meiner Delphizeit :biggrin: konnte ich soetwas wie das hier problemlos compilieren:
unit Unit1;
interface
type
myclass1 = class (Tobject)
protected
procedure mymethod(const val : myclass1); virtual; abstract;
end;
myclass2 = class(myclass1)
public
procedure mymethod(const val : myclass2);virtual;
end;
implementation
uses Windows;
{ myclass2 }
procedure myclass2.mymethod(const val: myclass2);
begin
writeln('Hello...!');
readln;
end;
end.
Jetzt meine Frage. Ich habe in delphi in der übergeordneten Klasse (myclass1) eine Methode (mymethod) als abstrakt definiert mit dem const Parameter vom Datentyp (myclass1). Die Klasse (myclass2), die von myclass 1 erbt beinhaltet die gleiche methode mit dem Parameter vom Typ myclass2. Ich meine jetzt - bis auf den Umstand, dass ich eine Template Klasse in C++ darstellen möchte - den gleichen Konstrukt in Delphi aufgebaut zu haben wie in C++. Daher meine Ratlosigkeit wieso Delphi den o.g. Code compiliert, aber C++ mit o.g. Fehlermeldung aussteigt. Hat jemand eine Erklärung für mich?
Danke und viele Grüße
pajofego
ich mal wieder und meine Versuche mir das C++ beizubringen.
Ich habe eine Basisklasse(abstrakte Klasse), in der steht da jetzt nicht viel drin.
template <class T>
class clClass
{
protected:
virtual void Init(const T& value) = 0;
virtual void Delete() = 0;
virtual void CopyValues(const clClass<T>& scr) = 0;
public:
clClass(void){};
virtual ~clClass(void){};
virtual const T& operator[](int i) const = 0;
};
Von dieser Klasse erbe ich jetzt folgende. Hier nur die Methode, mit der ich das Problem habe:
#include "clClass.h"
template <class T>
class clVector : public clClass<T>
{
protected:
//...mehr code
virtual void CopyValues(const clVector<T>& scr)
{
#ifdef _DEBUG
cout << "Laenge des Vektors: " << scr.GetLength() << endl;
#endif
if(m_iLength == scr.GetLength())
for(int i = 0; i<m_iLength; i++)
m_pVector[i] = scr[i];
else
{
cerr << "Vektorlaenge stimmen nicht ueberein!" << endl;
exit(1);
}
};
public:
//... mehr code
};
Versuche ich das ganze zu compilieren, bekomme folgende Fehlermeldung:
Fehler 1 error C2259: 'clVector<T>': Instanz von abstrakter Klasse kann nicht erstellt werden c:\eigene dateien\vspr2005\noc_2d\noc_2d\noc_2d.cpp 18
Aus meiner Delphizeit :biggrin: konnte ich soetwas wie das hier problemlos compilieren:
unit Unit1;
interface
type
myclass1 = class (Tobject)
protected
procedure mymethod(const val : myclass1); virtual; abstract;
end;
myclass2 = class(myclass1)
public
procedure mymethod(const val : myclass2);virtual;
end;
implementation
uses Windows;
{ myclass2 }
procedure myclass2.mymethod(const val: myclass2);
begin
writeln('Hello...!');
readln;
end;
end.
Jetzt meine Frage. Ich habe in delphi in der übergeordneten Klasse (myclass1) eine Methode (mymethod) als abstrakt definiert mit dem const Parameter vom Datentyp (myclass1). Die Klasse (myclass2), die von myclass 1 erbt beinhaltet die gleiche methode mit dem Parameter vom Typ myclass2. Ich meine jetzt - bis auf den Umstand, dass ich eine Template Klasse in C++ darstellen möchte - den gleichen Konstrukt in Delphi aufgebaut zu haben wie in C++. Daher meine Ratlosigkeit wieso Delphi den o.g. Code compiliert, aber C++ mit o.g. Fehlermeldung aussteigt. Hat jemand eine Erklärung für mich?
Danke und viele Grüße
pajofego