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.