Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wie setze ich das dort hin ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
22.04.2006, 14:54 Uhr
cmos



Hallöchen,
mal eine bescheidene Frage.
Ich habe z.b.


C++:

class CLebewesen
{
      protected:
           viele attribute;
      public:
           viele methoden;
};

class CMensch : public Lebewesen
{
       public:
           rababer rababer
};

#include "Lebewesen.h"
class CFeld
{
    private:
        CLebewesen *pWesen;
    public:
        CFeld()
        {  pWesen = new CLebewesen[4]; }
      
        void mSetLebewesen(int index, CLebewesen* pEinWesen)
        {
              pWesen[index] ... ??
        }
};


Mir geht es um die Stelle wo das Fragezeichen steht.
Wie geht es das ich an die Stelle z.B. pWesen[2] pEinWesen setzen kann ?

Grüße und Danke,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.04.2006, 15:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mit = ?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.04.2006, 15:18 Uhr
Lensflare



Ich weiss nicht ob ich dich richtig verstanden habe, aber meinst du vielleicht das?

C++:
pWesen = pEinWesen; //für ganzes Array
pWesen[index] = pEinWesen[index]; //für einen Array-Eintrag
pWesen[index] = pEinWesen; //falls pEinWesen kein Array ist


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.04.2006, 15:48 Uhr
cmos



Ja genau Lensflare,
das meine ich, speziell letzteres pEinWesen ist kein Array.
Muss ich dafür operatoren Überladen ? Denn so gehts nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.04.2006, 16:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat:

Denn so gehts nicht.


klar, hat ja auch keine beine

Ne im ernst, mit der präzisen aussage "Denn so gehts nicht." kann man nix anfangen...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.04.2006, 16:17 Uhr
cmos



error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'void' akzeptiert (oder keine geeignete Konvertierung möglich)

Diese Fehlermeldung erhalte ich
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.04.2006, 17:04 Uhr
Tommix



Hallo

Zitat von cmos:
speziell letzteres pEinWesen ist kein Array.


Sondern was? Laut der Fehlermeldung void, bist Du sicher, daß da nicht void* stand?

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.04.2006, 23:18 Uhr
Lensflare



dein pWesen Array muss ein Zeiger sein.
du musst es also so schreiben:

C++:
CLebewesen **pWesen;
*pWesen = new CLebewesen[4];



EDIT:
Oder der Übergabeparameter pEinWesen darf kein Zeiger sein.
Also eintweder beide Zeiger oder beide nicht.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 22.04.2006 um 23:23 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.04.2006, 02:00 Uhr
Spacelord
Hoffnungsloser Fall


Hi cmos,
angesichts deiner Vererbungsbeziehung gehe ich mal davon aus dass du mit dem Container ,von Lebewesen in CFeld polymorphes Verhalten erzielen möchtest.Dass also,je nachdem ob sich hinter dem CLebewesen Zeiger ein Mensch,Tier oder weiß der Herr was für nen Subtyp-Objekt verbirgt,die entsprechende Methode der Unterklasse aufgerufen wird.
Dann darfst du aber kein Array von CLebewesen halten sondern eins mit Zeigern auf CLebewesen Objekte.

Was du also an der relevanten Stelle benötigst sollte etwa so aussehen:

C++:
class CFeld
{
    private:
        size_t max_size;
        CLebewesen **pWesen;
    public:
        CFeld(size_t m_):max_size(m_)
        {  
            pWesen = new CLebewesen*[max_size];
            for(size_t idx=0;idx<max_size;++idx)
                pWesen[idx]=NULL;
        }
......


pWesen hat also den Typ Zeiger auf ein Array von Zeigern auf CLebewesen.
Da ein Array aber intern auch als Zeiger interpretiert wird,ist der Typ unterm Strich ein Zeiger auf einen Zeiger auf Lebewesen .

Der Vollständigkeit halber sei noch erwähnt dass man unter normalen Umständen eher mit nem STL Container (und eventuell noch mit geeigneten Smartpointern) arbeiten würde,aber da das für dich ja wohl eher ne Übung sein soll will ich darauf garnicht näher eingehen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.04.2006, 04:48 Uhr
Helmut




C++:
class CLebewesen
{
      protected:
          // viele attribute;
      public:
          // viele methoden;
};

class CMensch : public Lebewesen
{
       public:
           //rababer rababer
};

#include "Lebewesen.h"
class CFeld
{
    private:
        CLebewesen* pWesen[4]; //....
    public:
        CFeld();      
        
        void mSetLebewesen(int index, CLebewesen* pEinWesen)
        {
              pWesen[index]  = pEinWesen;
        }
};

// Wenn schon 4 neue Objekte dann so:
CFeld::CFeld()
{
    for(int i = 0; i < 4; i++)
        pWesen[i] = new CLebewesen;
}
// und nicht   pWesen = new CLebewesen[4];
      
// Aber was soll das, ich denke du willst 4 Zeiger auf CLebewesen mit
// mSetLebewesen(int index, CLebewesen* pEinWesen); importieren.
// Die Objekte müssen alle außerhalb von CFeld existieren.
// Plaz für die 4 Zeiger hab ich oben reserviert.(CLebewesen* pWesen[4];)




Zitat von Helmut:

Wünsche dir Vorankommen!

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: