Hi!
Habe wieder mal eine Frage an die c++-Spezialisten hier.
Ich habe versucht den Kanal einer Aufzeichnung zu bekommen. Dazu gibt es folgende Deklarationen in VDR:
Code
class cRecordingInfo {
private:
tChannelID channelID;
...
public:
tChannelID ChannelID(void) { return channelID; }
...
};
class cRecording : public cListObject {
private:
cRecordingInfo *info;
...
public:
const cRecordingInfo *Info(void) const { return info; }
...
};
Display More
Nun wollte ich die ChannelID mit folgendem Code erhalten:
Das kompiliert leider nicht, und das hat anscheinend was mit den CONST-Bedingungen zu tun:
Code
g++ -fPIC -g -O3 -march=pentium2 -mcpu=pentium3 -fomit-frame-pointer -pipe -Wall -Woverloaded-virtual -O2 -g -c -DHAVE_IMAGEMAGICK -DHAVE_FREETYPE -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"text2skin"' -I/usr/include/freetype2 -I../../../include -I../DVB/linux/include -I../DVB/include -I. -o display.o display.c
display.c: In member function `virtual cxType
cText2SkinDisplayMenu::GetTokenData(const txToken&)':
display.c:1212: error: passing `const cRecordingInfo' as `this' argument of `
tChannelID cRecordingInfo::ChannelID()' discards qualifiers
display.c:1213: error: passing `const cRecordingInfo' as `this' argument of `
tChannelID cRecordingInfo::ChannelID()' discards qualifiers
make: *** [display.o] Error 1
Da ich mich da nicht so wirklich auskenne habe ich mal bei Scott Meyers "Effective C++" nachgelesen. Mit folgenden Zeilen funktioniert das ganze dann:
Code
cRecordingInfo *recInfo = const_cast<cRecordingInfo*>(mRecording->Info());
tChannelID chID = recInfo->ChannelID();
Ist das ein Fehler in den VDR-Deklarationen? Oder gibt es einen Weg die ChannelID ohne einen CAST zu bekommen?
Gruß,
Brougs78