Template-Programmierung, falsche Syntax

fbfeix

Erfahrenes Mitglied
Hallo Leute

ich hab mir in Eclipse folgende Klasse erstellt:

C++:
//filename: Properties.h

#ifndef PROPERTIES_H_
#define PROPERTIES_H_

#include "ByteBlock.h"

template<class T, class Tval>
class Property {
public:
	Property(const ByteBlock * byteBlock, const char * Name);
	Property(const ByteBlock * byteBlock, const char * Name, T value);
	~Property();
	const char *getName() const;
	Tval getValue() const;
	void setValue(Tval Value);

private:
	const char * Name; // verweist auf ein ByteBlockElement->Elements-Item
	//const char * CssPattern;
	Tval Value;
};








#endif

daraus hat mir dann Eclipse diese Datei gezaubert.


C++:
//filename: Properties.cpp

#include "Properties.h"


template<class T, class Tval> inline Property(const ByteBlock *byteBlock, const char *Name)
{
}

template<class T, class Tval> inline Property(const ByteBlock *byteBlock, const char *Name, T value)
{
}

inline Property::~Property()
{
	delete this->Name;
	delete this->Value;
	delete this;
}



const char inline *Property::getName() const
{
    return Name;
}


template<class T, class Tval> Tval Property<T,Tval>::getValue() const
{
	return Value;
}





template<class T, class Tval> void Property<T,Tval>::setValue(Tval Value)
{
	this->Value = Value;
}


Leider meckert er mir aber bei den ersten beiden Funktionen (Syntax Error):

C++:
template<class T, class Tval> inline Property(const ByteBlock *byteBlock, const char *Name)
{
}

template<class T, class Tval> inline Property(const ByteBlock *byteBlock, const char *Name, T value)
{
}

Was ich auch nicht ganz verstehe: Muss man den die Funktionen nicht auf die Klasse verweisen (was ist da der richtige Fachausdruck?)?
Also dass ich dann praktisch "Property::property(...)" schreibe anstatt nur "Property(...)" so wie er es mir auch in der getName()-Funktion gemacht hat.

Noch eine Frage hinterher:
Kann man in einer Klasse, die von einer anderen Erbt die Eigenschaften umbennen?
Bsp: In der Elternklasse gibts die Eigenschaft:
C++:
string Eigenschaft;
dass ich die in der Kindklasse zu der mache:
C++:
string Farbe;
 
Zuletzt bearbeitet von einem Moderator:
Was hat Eclipse da gemacht? :suspekt:
Du hast recht, man muss die Klasse mit angeben.

Zur zweiten Frage: Nein, geht nicht.
Pointer/Referenzen könnte man verwenden, dann gibts die Eigenschaft eben doppelt.
Mit neuem und altem Namen.

Gruß
 
Im Outline Fenster -> Source -> Implement Method, dann die Funktionen auswählen ergibt den oben geposteten Code.

Mit Klassenangabe gibt er mir
Member Declaration not found.
aus.



Oke hab den fehler gefunden. So müsste es heißen:
C++:
template<class T, class Tval> inline Property<T,Tval>::Property(const ByteBlock *byteBlock, const char *Name)
{
}

template<class T, class Tval> inline Property<T,Tval>::Property(const ByteBlock *byteBlock, const char *Name, T value)
{
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück