Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Klassenproblem

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.05.2005
    Beiträge
    14

    Klassenproblem

    Hi,


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

    Code:
    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 &))

    Code:
    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.

    Code:
    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?

  2. #2
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    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.

    Code:
    int cMyServer::Test(const cMyServer & other)
    {
            if(strcmp(this->GetIt(),other.GetIt())==0) return 1;
            else return 0;
    }
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.05.2005
    Beiträge
    14
    ahh thx des hatte ich glatt übersehen ^^

    habs jetzt abgeändert:
    Code:
    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
    Code:
    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

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    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.

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.05.2005
    Beiträge
    14
    ah danke vielmals, jetzt gehts

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Odzilla
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    08.05.2005
    Beiträge
    14
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •