Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

1

30.10.2005, 15:59

Casting problem

Hallo :) :) :)


Ich hab mir ne Hierarchie überlegt um mit Streams zu arbeiten. Aber da gibst komische Sachen beim casting (ich blicks nicht).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//abstract base class

class CStream
{
    virtual void Func1(...)=0;
};

class CReportStream: virtual CStream
{
    virtual void Func2(...)=0;
};

class CStreamManager: public sgCList<CStream>
{
    //führt Func1 bei allen Objekten durch:

    Func1(...);
};

class CReportStreamManager: public CStreamManager
{
    //führt Func2 bei allen Objekten durch:

    void Func2(...);
};


Also. Alles klar soweit, aber wenn ich CReportStreamManager::Func2 definiere, muss ich dabei einen Cast durchführen:

C-/C++-Quelltext

1
2
3
4
5
6
7
void CReportStreamManager::Func2(...)
{
    for(/*durchläuft alle elemente*/)
    {
        ((CReportStream* )GetP(LaufVariable))->Func2(...);
    }
}

Aber da kriege ich nen Fehler.

Quellcode

1
cannot convert from base `CStream' to derived type `CReportStream' via virtual base `CStream'

Warum? Ist doch alles so logisch, oder nicht?


Bitte um Hilfe.


Samuel G.
Quak

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

30.10.2005, 16:06

wenn ich das richtig verstehe versuchst du da nen upcast von CStream auf CReportStream. das geht soweit ich weiß mit dem einfachen cast operator nich so ohne weiteres, probiers mal mit dynamic_cast. findest dazu auch einiges in der hilfe und über google
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

3

30.10.2005, 16:15

Beitrag

Hey, thanks. So klappts. :)

Aber warum muss ich diesen komischen cast verwenden? Warum geht das nicht normal? ??? ??? ???
Quak

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

4

30.10.2005, 17:13

C-Casts sind in C normal, aber nicht in C++. Weshalb glaubst du warum es die anderen Casts gibt.

Naja, egal, um deine Frage zu beantworten: Du hast ne virtuelle Ableitung in deiner Hierarchie. Dadurch muss beim Upcast zur Laufzeit etwas getan werden, was nicht durch ein einfache uminterpretieren des Zeigertyps geschehen kann. Dazu ist ein C-Cast aber nicht in der lage, sondern nur der dynamic_cast, da er als einziger Laufzeit-prüfungen durchführen kann.
Why is 6 afraid of 7?
Because 7 8 9

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

5

30.10.2005, 23:35

Beitrag

Danke.

Zitat

Why is 6 afraid of 7?
Because 7 8 9

:-D :-D :-D
Find ich ne geile Signatur.
Quak

Werbeanzeige