c++ problem


robb

Well-Known Member
Joined
Sep 15, 2005
Messages
1,485
Location
Bad Nauheim bei Frankfurt/Main
LOCATION
Bad Nauheim bei Frankfurt/Main
also wie ihr vielleicht wisst bin ich grad am diplomarbeit schreiben, und zwar ne application für dvb-t die das ganze dann auch noch übers netz streamen soll... leider bin ich nicht der beste programmieren... :roll:
also ich kann jetzt mittlerweile tv empfangen, das problem ist jetzt nur die organisation der sender... da dvb-t ja in jedem sendegebiet andere frequenzen und bandbreiten hat. ich bräuchte also eine kleine header datei, wo ich (oder andere benutzer) komfortabel die frequezen editieren können.

ich dachte so an eine struktur bzw. union, zb. ARD, die dann je nach region die unterschiedlichen werte enthalten.

also würd ich gerne ne funktion aufrufen, zb. getSettings der ich dann den sender und die region übergebe und dann die struktur mit den frequenzen usw. zürckbekomme.

ich bräuchte halt mal ne idee wie sowas am besten zu realisieren ist. weil normale unions kann man ja nicht so einfach mit werten vorbelegen...
 
typedef struct RHEINMAIN {
union {
struct {
LONG freq = 198500;
BandwidthType bwt = BDA_BW_7MHz;
LONG vid = 101;
LONG aud = 102;
} ard;

struct {
LONG freq = 578000;
BandwidthType bwt = BDA_BW_8MHz;
LONG vid = 337;
LONG aud = 338;
} rtl;

struct {
LONG freq = 198500;
BandwidthType bwt = BDA_BW_8MHz;
LONG vid = 305;
LONG aud = 306;
} pro7;
};
} RHEINMAIN, *PRHEINMAIN;


so wollte ich das machen, geht aber nicht wegen:
error C2258: Ungueltige Syntax für rein virtuelle Methode; '= 0' erforderlich;
error C2252: 'freq' : Nur Funktionen koennen rein virtuell deklariert werden;
usw....


ich glaub ihr wisst aber was ich vorhab oder?
 
struct RHEINMAIN {
union {
struct {
LONG freq;
BandwidthType bwt;
LONG vid;
LONG aud;
} ard;

struct {
LONG freq;
BandwidthType bwt;
LONG vid;
LONG aud;
} rtl;

struct {
LONG freq;
BandwidthType bwt;
LONG vid;
LONG aud;
} pro7;
};
} ;

RHEINMAIN RheinMain;

RheinMain.ard.freq = 198500; *
RheinMain.ard.bwt = BDA_BW_7MHz;
RheinMain.ard.vid = 101;
RheinMain.ard.aud = 102;



jetzt hab ich es nochmal so versucht, aber das geht auch nicht:

error C2143: Syntaxfehler : Fehlendes ';' vor '.' *in dieser zeile
error C2501: 'RheinMain' : Fehlende Speicherklasse oder Typspezifizierer
error C2371: 'RheinMain' : Neudefinition; unterschiedliche Basistypen
usw..
 
versuch mal:
Code:
<i>
</i>struct SenderInfo
{
    LONG freq;
    BandwithType bwt;
    LONG vid;
    LONG aud;
}

struct RheinMain
{

    SenderInfo ard;
    SenderInfo rtl;
    SenderInfo pro7;

    RheinMain() //constructor, anscheinend arbeitest du ja in c++
    {
        //Hier drin werden ard, rtl und pro7 initialisiert, also z.B....
        ard.freq = 198500;
        ard.bwt = BDA_BW_7MHZ;
        ard.vid = 101;
        ard.aud = 102;
        //usw.
    }
}

Edit: Tja, zwei minuten zu spät ^_^
 
okay danke, dass mit dem sender info ist cool.. würde sowas hier gehen?

struct SenderInfo
{
LONG freq;
BandwithType bwt;
LONG vid;
LONG aud;
}

struct{
SenderInfo ard;
SenderInfo rtl;
SenderInfo pro7;
SenderInfo sat1;
SenderInfo kabel1;
} RHEINMAIN, BERLIN, MUENCHEN;
also, dass ich dann am ende viele gebiete (RHEINMAIN, BERLIN, MUENCHEN) hab, die alle über alle sender und deren SenderInfos verfügen?
oder wie lege ich mehrere strukturen an mit dem selben inhalt? muss ja auch gehen, zb. mehrere arbeitnehmer, die alle die selben stammdaten haben.
aber wenn das mit dem SenderInfo so geht ist das echt cool, das spart einiges...[/quote]
 
robb said:
okay danke, dass mit dem sender info ist cool.. würde sowas hier gehen?

struct SenderInfo
{
LONG freq;
BandwithType bwt;
LONG vid;
LONG aud;
}

struct {
SenderInfo ard;
SenderInfo rtl;
SenderInfo pro7;
SenderInfo sat1;
SenderInfo kabel1;
} RHEINMAIN, BERLIN, MUENCHEN;
also, dass ich dann am ende viele gebiete (RHEINMAIN, BERLIN, MUENCHEN) hab, die alle über alle sender und deren SenderInfos verfügen?
oder wie lege ich mehrere strukturen an mit dem selben inhalt? muss ja auch gehen, zb. mehrere arbeitnehmer, die alle die selben stammdaten haben.
aber wenn das mit dem SenderInfo so geht ist das echt cool, das spart einiges...
[/quote]


Ja, das würde gehen. Alternativ könntest du das auch so machen:
Code:
<i>
</i>struct SenderInfo
{
    LONG freq;
    BandwithType bwt;
    LONG vid;
    LONG aud;
}

struct SendeGebiet {
    SenderInfo ard;
    SenderInfo rtl;
    SenderInfo pro7;
    SenderInfo sat1;
    SenderInfo kabel1;
};

SendeGebiet RHEINMAIN;
SendeGebiet BERLIN;
SendeGebiet MUENCHEN;

Ist halt geschmackssache, geht beides.

EDIT: ach ja, wenn du dann noch deine daten in die SenderInfo's schreiben willst brauchst du sicher noch irgendeine funktion dafür in der dann z.B. RHEINMAIN.rtl.freq usw auf ihre Werte gesetzt werden.
 
nites said:
EDIT: ach ja, wenn du dann noch deine daten in die SenderInfo's schreiben willst brauchst du sicher noch irgendeine funktion dafür in der dann z.B. RHEINMAIN.rtl.freq usw auf ihre Werte gesetzt werden.


ja ich habs jetzt so gemacht wie ich oben geschrieben hab, aber die ganzen variablen RHEINMAIN etc. weggelassen, da ich die nichtmehr braucht. hab jetzt einfach eine globale int variable für das gewählte gebiet. und über ne enumeration bekommt man dann das gebiet...

und das vorbelegen mit werten hab ich einfach so gemacht:
if (SenderID == IDM_ARD)
{
lVideo = 101;
lAudio = 102;
lFrequency = 198500;
eBandwidth = BDA_BW_7MHz;
}
if (SenderID == IDM_ZDF)
{
lVideo = 545;
lAudio = 546;
lFrequency = 482000;
eBandwidth = BDA_BW_8MHz;
}
if (SenderID == IDM_HR)
{
lVideo = 401;
lAudio = 402;
lFrequency = 762000;
eBandwidth = BDA_BW_8MHz;
}

also diese IDM_ARD ist einfach der knopf der gedrückt wird, und dann werden die entsprechenden werte gesetzt und anhand derer wird dann getunt.
 
Ja, das ist eine gute Lösung. Statt der vielen if-anweisungen könntest du evt. eine switch-case anweisung benutzen.
 
Elektranox said:
oder zumindest ein elseif statt einem if das spart auch schon leistung :) (wobei switch natürlich noch sehr viel besser ist ^^)
Blödsinn, der Compiler setzt das dann intern sowieso gleich performant um, ifs werden in aller Regel zu gleichem oder sehr ähnlichen binär (oder sonstigen) code wie switch/case :)
 
Nagelfar said:
Elektranox said:
oder zumindest ein elseif statt einem if das spart auch schon leistung :) (wobei switch natürlich noch sehr viel besser ist ^^)
Blödsinn, der Compiler setzt das dann intern sowieso gleich performant um, ifs werden in aller Regel zu gleichem oder sehr ähnlichen binär (oder sonstigen) code wie switch/case :)
aber bei ifs muss er doch immer alle durchgucken, bei nem switch geht er ja nur bis dahin wo dann das break kommmt..
 
robb said:
Nagelfar said:
Elektranox said:
oder zumindest ein elseif statt einem if das spart auch schon leistung :) (wobei switch natürlich noch sehr viel besser ist ^^)
Blödsinn, der Compiler setzt das dann intern sowieso gleich performant um, ifs werden in aller Regel zu gleichem oder sehr ähnlichen binär (oder sonstigen) code wie switch/case :)
aber bei ifs muss er doch immer alle durchgucken, bei nem switch geht er ja nur bis dahin wo dann das break kommmt..
Ok, anders formuliert, jeder vernünftige Compiler wird dir ein switch und ein if intern so umsetzen, dass du, bei deiner Anwendung, keinerlei Unterschied spüren wirst.
Und deine Aussage ist falsch insofern als wenn du einen Block hast ca:
int i = 1;
int j = 2;
if (i==0) {
System.out.println(0);
}
else if(i==1) {
System.out.println(1);
}
else if(i==1&& j==2) {
System.out.println(2);
}
else {
System.out.println(3);
}

dann geht er auch nur bis zu dem i==1 statement und führt die folgenden nicht mehr aus.
 
wie kann ich eigentlich über nen videofenster nen text schreiben? halt den sendernamen oder den namen der sendung einblenden? sieht ja doof aus, wenn ich das in nen extra fenster mache.
ich wüsste auch nicht wonach ich jetzt im netz suchen sollte.. :huh:
 
robb said:
wie kann ich eigentlich über nen videofenster nen text schreiben? halt den sendernamen oder den namen der sendung einblenden? sieht ja doof aus, wenn ich das in nen extra fenster mache.
ich wüsste auch nicht wonach ich jetzt im netz suchen sollte.. :huh:

Ich muss jetzt auch raten, aber ich denke mal wenn das Video in einem normalen Fenster (unter Windows oder wofür du das schreibst) gezeigt wird, könntest du evt. eine durchsichtige Ebene davor packen und da dann den Sendernamen und solche Sachen drin zeigen. Wenn du allerdings ein videosignal an einen Fernseher schickst musst du wohl irgendwie den Sender-namen in das videosignal mit einspeisen. Wie das geht weiss ich aber leider nicht.
 
Ich rate dir mal die Kaffeine Sourcen zu betrachten, die haben auch nen OSD für die Senderanzeige :) Wenn du fertig bist stell das ganze mal online, ich bin als Gnome User interessiert ^^ Mplayer/Gxine ist über kurz oder lang auch keine Lösung...
 
nites said:
robb said:
wie kann ich eigentlich über nen videofenster nen text schreiben? halt den sendernamen oder den namen der sendung einblenden? sieht ja doof aus, wenn ich das in nen extra fenster mache.
ich wüsste auch nicht wonach ich jetzt im netz suchen sollte.. :huh:

Ich muss jetzt auch raten, aber ich denke mal wenn das Video in einem normalen Fenster (unter Windows oder wofür du das schreibst) gezeigt wird, könntest du evt. eine durchsichtige Ebene davor packen und da dann den Sendernamen und solche Sachen drin zeigen. Wenn du allerdings ein videosignal an einen Fernseher schickst musst du wohl irgendwie den Sender-namen in das videosignal mit einspeisen. Wie das geht weiss ich aber leider nicht.
nee das ist nen normales windows programm... ja gut, dann muss ich nochmal weiter suchen. oder meinste echt, dass das geht mit ner transparenten ebene? geht das denn bei ner normalen win32 anwendung?
würde auch nen seperates fenster in kauf nehmen, aber mit dem visual studio 6 kann man nur dämliche dialogboxen machen und dort nichtmal die schriftart oder größe ändern...
 
Back
Top