PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Klassenproblem



Odzilla
09-05-2005, 13:01
Hi,


ich habe eine Klasse 'cMyServer', die eine Funktion 'GetIt' bietet, die einen string aus der Klasse ausgibt.


class cMyServer : public cMyData
{
public:
cMyServer(int num, char name[100]):cMyData(num){ strcpy(itsName,name); }
virtual ~cMyServer() {}
virtual void Show() { cMyData::Show(); cout << itsName << endl; }
virtual int Test(const cMyServer &);
virtual const char * GetIt() { return itsName; }
private:
char itsName[100];
int itsValue;
};

Ausserdem bietet die Klasse eine Funktion, die ihren eigenen string 'itsName' mit dem einer anderen cMyServer Instanz vergleicht (virtual int Test(const cMyServer &))


int cMyServer::Test(const cMyServer & other)
{
if(strcmp(this->GetIt,other.GetIt)==0) return 1;
else return 0;
}


Leider führt die Funktion zu einem Compilerfehler, den ich nicht so ganz verstehe.


data2.cc: In member function `virtual int cMyServer::Test(const cMyServer&)':
data2.cc:26: error: argument of type `const char*(cMyServer::)()' does not
match `const char*'

Die Rückgabetypen von this->GetIt und other.GetIt sollten ja gleich sein, da es sich um die selbe Funktion handelt.


Hat jemand ne Ahung, wie man das hinbekommt, bzw, wo mein Fehler liegt?

panzi
09-05-2005, 14:12
Du hast nicht die Funktion GetIt aufgerufen und deren Rückgabewert übergeben, nein, du hast die Funktion selbst (bzw. einen Funktionspointer) übergeben. Das sagt dir ja auch die Fehlermeldung.


int cMyServer::Test(const cMyServer & other)
{
if(strcmp(this->GetIt(),other.GetIt())==0) return 1;
else return 0;
}

anda_skoa
09-05-2005, 14:32
Du könntest auch die beiden Variablen direkt vergleichen.

Und du könntest C++ benutzen, also zB bool als Rückgabewert für logische Werte :)

Ciao,
_

Odzilla
09-05-2005, 16:06
ahh thx des hatte ich glatt übersehen ^^

habs jetzt abgeändert:

int cMyServer::Test(const cMyServer & other)
{
if(strcmp(this->GetIt(),other.GetIt())==0) return 1;
else return 0;
}

Leider gibts aber wieder einen Fehler, der mir recht wenig sagt

error: passing `const cMyServer' as `this' argument of `virtual
const char* cMyServer::GetIt()' discards qualifiers

if(strcmp(itsName,other.itsName)==0) return 1; <~ so funktionierts zwar, wollte es aber lieber über die GetIt() Funktion ;)

An bool hatte ich gar nicht gedacht, bin noch int gewohnt ;)

locus vivendi
09-05-2005, 17:17
Du hast vergessen, die Funktion als const zu markieren. Falls du dazu etwas nachlesen möchtest, kannst du das z.B. hier tun:
http://www.icce.rug.nl/documents/cpp.shtml
Im Kapitel 6.

Odzilla
09-05-2005, 17:22
ah danke vielmals, jetzt gehts :)

anda_skoa
09-05-2005, 20:17
An bool hatte ich gar nicht gedacht, bin noch int gewohnt ;)

:)
Dann solltest du vielleicht als nächstes einen Blick auf std::string werfen

Ciao,
_

Odzilla
09-05-2005, 21:20
hehe kommt mir bekannt vor, mein letzter bot war ein gewirr aus strings und char[] *gg*

naja wollte mir mal bissl die klassen in c++ anschaun, hab bisher nur c gemacht