 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Felix Kater Guest
|
Posted: Wed Jun 23, 2004 2:03 pm Post subject: typedefs/structs im header deklarieren... |
|
|
Hallo zusammen,
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
* Muss man auch die typedef in den header aufnehmen oder genügt das
struct? Denn ich kriege sonst in *.cpp eine doppelte
Typendefinition...
* Lässt man im header den private-Teil einfach weg?
* Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
Danke für Hinweise!
Felix
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Hendrik Belitz Guest
|
Posted: Wed Jun 23, 2004 2:17 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Felix Kater wrote:
| Quote: | Hallo zusammen,
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
* Muss man auch die typedef in den header aufnehmen oder genügt das
struct? Denn ich kriege sonst in *.cpp eine doppelte
Typendefinition...
* Lässt man im header den private-Teil einfach weg?
* Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
|
1, Das Typedef ist bei der Definition vollkommen unnötig. Das hier ist C++,
nicht C.
2. Ebenso ist das abschließende struct1 überflüssig (evtl. sogar falsch?),
dafür muß hier aber auf jeden Fall ein ; hin.
3. Da Du nicht den gesamten Inhalt der Struktur public machst, würde ich
empfehlen, daß ganze nicht als struct, sondern als class zu deklarieren. Das
ist aber im Großen und Ganzen Geschmacksache.
--
To get my real email adress, remove the two onkas
--
Hendrik Belitz
- Abort, Retry, Fthagn? -
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Wed Jun 23, 2004 2:28 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Hendrik Belitz wrote:
| Quote: |
2. Ebenso ist das abschließende struct1 überflüssig (evtl. sogar falsch?),
dafür muß hier aber auf jeden Fall ein ; hin.
|
Falsch ist es nicht. Damit wird gleich eine Instanz des structs mit
Namen struct1 angelegt.
Ich bezweifle aber, dass der OP das möchte.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Wed Jun 23, 2004 2:36 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Felix Kater wrote:
| Quote: | Hallo zusammen,
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
* Muss man auch die typedef in den header aufnehmen oder genügt das
struct?
|
Das struct genügt grundsätzlich immer.
| Quote: | Denn ich kriege sonst in *.cpp eine doppelte Typendefinition...
|
Du definierst eine struct und per typedef gibst du ihr als Alias-Namen
den Namen, den sie schon hat. Der Name wäre dann (wenn auch für den
selben Typ) zweimal vergeben.
| Quote: | * Lässt man im header den private-Teil einfach weg?
|
Was meinst du mit "im Header"? Man definiert die struct doch nur dort.
| Quote: | * Wie gehe ich mit den öffentlichen Funktionen des structs im header
um?
|
Wenn sie nicht gerade sehr kurz sind und du evtl. inlining haben willst,
definierst du sie im .cpp-File und deklarierst sie im Header nur.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Wed Jun 23, 2004 2:38 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Christoph Rabel wrote:
| Quote: | Hendrik Belitz wrote:
2. Ebenso ist das abschließende struct1 überflüssig (evtl. sogar
falsch?), dafür muß hier aber auf jeden Fall ein ; hin.
Falsch ist es nicht. Damit wird gleich eine Instanz des structs mit
Namen struct1 angelegt.
|
Nur, wenn man das typedef wegmacht. Ansonsten wird struct1 als
Alias-Name für struct1 definiert, und das wäre tatsächlich falsch. Der
OP hatte ja auch über eine entsprechende Meldung des Compilers
berichtet.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Wed Jun 23, 2004 2:44 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Felix Kater wrote:
| Quote: |
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
|
Die Deklaration schaut so aus:
struct struct1;
Damit führst du nur den Namen ein. Dein Beispiel ist schon eine Definition.
| Quote: | typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
|
Hier fehlt ein Strichpunkt.
| Quote: | * Muss man auch die typedef in den header aufnehmen oder genügt das
struct? Denn ich kriege sonst in *.cpp eine doppelte
Typendefinition...
|
Das typedef ist prinzipiell in C++ überflüssig. Ohne typedef schauts so aus:
struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
};
Was dir vermutlich noch fehlt sind sogenannte Include-Guards, die
verhindern, dass das struct zwei mal definiert wird.
| Quote: | * Lässt man im header den private-Teil einfach weg?
|
Auf keinen Fall! Da du einen private Teil hast, würde ich dir noch raten
statt des structs eine Klasse zu nehmen! Technisch gesehen besteht zwar
kein Unterschied, aber structs sollten
| Quote: | * Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
|
Du deklarierst sie zumeist nur, im cpp File lieferst du dann die Definition.
Ich würde dir empfehlen ein gutes Buch durchzuarbeiten, deine Fragen
sollten darin abgedeckt sein.
Unter http://www.accu.org findest du sehr viele Buchbewertungen, die dir
vielleicht weiterhelfen.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Wed Jun 23, 2004 5:45 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Rolf Magnus wrote:
| Quote: | Christoph Rabel wrote:
Hendrik Belitz wrote:
2. Ebenso ist das abschließende struct1 überflüssig (evtl. sogar
falsch?), dafür muß hier aber auf jeden Fall ein ; hin.
Falsch ist es nicht. Damit wird gleich eine Instanz des structs mit
Namen struct1 angelegt.
Nur, wenn man das typedef wegmacht.
|
Ja, habs gleich nach dem Abschicken gesehen, aber zu spät
gecancelt.
| Quote: | Ansonsten wird struct1 als
Alias-Name für struct1 definiert, und das wäre tatsächlich falsch. Der
OP hatte ja auch über eine entsprechende Meldung des Compilers
berichtet.
|
Was meinst du mit falsch?
Ob mit oder ohne typedef ist der Code legal (abgesehen davon
das der Strichpunkt fehlt).
Ich denke die Meldung kommt weil er den Header zwei mal
inkludiert hat.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Wed Jun 23, 2004 7:58 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
On Wed, 23 Jun 2004 16:38:12 +0200, Rolf Magnus <ramagnus (AT) t-online (DOT) de>
wrote:
| Quote: | Christoph Rabel wrote:
Hendrik Belitz wrote:
2. Ebenso ist das abschließende struct1 überflüssig (evtl. sogar
falsch?), dafür muß hier aber auf jeden Fall ein ; hin.
Falsch ist es nicht. Damit wird gleich eine Instanz des structs mit
Namen struct1 angelegt.
Nur, wenn man das typedef wegmacht. Ansonsten wird struct1 als
Alias-Name für struct1 definiert, und das wäre tatsächlich falsch. Der
OP hatte ja auch über eine entsprechende Meldung des Compilers
berichtet.
|
Moechtest Du damit andeuten, dass
typedef
struct bla
{/**/}
bla;
falsch ist?
MfG
Horst
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tibor Pausz Guest
|
Posted: Wed Jun 23, 2004 8:10 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Felix Kater <f.kater2 (AT) gmx (DOT) net> wrote:
| Quote: | Hallo zusammen,
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
|
Sinvoller wäre das ganze so zu schreiben
// struct1.h
class struct1 {
int i;
public:
in j;
struct1 ();
void func1 (int k);
};
// struct1.cc
struct1::struct1 () : i(0), j(0) {};
void
struct1::func1 (int k) {
// implementation
}
| Quote: | * Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
|
Nur die Deklarationen dort einsetzen und nicht die Definitionen!
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Hannah Schroeter Guest
|
Posted: Wed Jun 23, 2004 9:47 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Hallo!
Tibor Pausz <pausz (AT) stud (DOT) uni-frankfurt.de> wrote:
| Quote: | [...]
Sinvoller wäre das ganze so zu schreiben
|
Ergänze:
#ifndef INC_STRUCT1_H
#define INC_STRUCT1_H
| Quote: | class struct1 {
int i;
public:
in j;
struct1 ();
void func1 (int k);
};
|
#endif
| Quote: | // struct1.cc
[...]
* Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
Nur die Deklarationen dort einsetzen und nicht die Definitionen!
|
Kommt drauf an, ob man inlining will.
Ich schreibe "triviale" Methoden direkt in die Klassendefinition,
z.B. Getter/Setter-Methoden oder auch Proxy-Methoden.
Gruß,
Hannah.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Wed Jun 23, 2004 9:47 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Horst Kraemer wrote:
| Quote: | Nur, wenn man das typedef wegmacht. Ansonsten wird struct1 als
Alias-Name für struct1 definiert, und das wäre tatsächlich falsch.
Der OP hatte ja auch über eine entsprechende Meldung des Compilers
berichtet.
Moechtest Du damit andeuten, dass
typedef
struct bla
{/**/}
bla;
falsch ist?
|
Das wollte ich eigentlich damit "andeuten", aber mir scheint, daß es da
andere Meinungen gibt. Ich ziehe also lieber mal alles zurück und
behaupte das Gegenteil ;-)
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Thu Jun 24, 2004 2:04 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
On Wed, 23 Jun 2004 23:47:52 +0200, Rolf Magnus <ramagnus (AT) t-online (DOT) de>
wrote:
| Quote: | Horst Kraemer wrote:
Nur, wenn man das typedef wegmacht. Ansonsten wird struct1 als
Alias-Name für struct1 definiert, und das wäre tatsächlich falsch.
Der OP hatte ja auch über eine entsprechende Meldung des Compilers
berichtet.
Moechtest Du damit andeuten, dass
typedef
struct bla
{/**/}
bla;
falsch ist?
Das wollte ich eigentlich damit "andeuten", aber mir scheint, daß es da
andere Meinungen gibt. Ich ziehe also lieber mal alles zurück und
behaupte das Gegenteil
|
Die Compiler vertreten eine andere Meinung Das typedef auf den
Namen der Klasse ist legal, wenn der Name nicht bereits in demselben
Scope definiert ist - und wenn es legal ist, wird es ignoriert, d.h.
es *ist* der Klassenname (7,1,3, Absatz 4)
--
Horst
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Idriz Smaili Guest
|
Posted: Fri Jul 02, 2004 10:20 pm Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Felix Kater wrote:
| Quote: | Hallo zusammen,
wie deklariere ich meine typedef/struct in der header-Datei richtig?
Könnte mir jemand mal die Deklaration zu folgendem struct-Beispiel
angeben (ansonsten siehe meine Einzelfragen unten):
typedef struct struct1{
private:
int i;
public:
int j;
struct1(){
i=0;
j=0;}
void func1(int k){
/* ... */ }
}struct1
* Muss man auch die typedef in den header aufnehmen oder genügt das
struct? Denn ich kriege sonst in *.cpp eine doppelte
Typendefinition...
* Lässt man im header den private-Teil einfach weg?
* Wie gehe ich mit den öffentlichen Funktionen des structs im header um?
Danke für Hinweise!
Felix
|
Hi Felix,
Ich definiere die structs immer auf diese Weise, und bis jetzt hat sich
kein Compiler aufgeregt:-)
typedef struct _Bla
^^^
{
int foo_;
int baz_;
} Bla;
^^
Wenn Du nachher dann ein Objekt der "Klasse==Struktur" in C++/C erzuegen
willst, dann machst Du folgendes:
Bla bla = {1, 3};
oder
Bla * p_bla = (Bla *) malloc (sizeof (Bla)); /* verwende in C++ immer
den new operator */
auf die attribute kannst Du dann wie gewohnt zugreiffen, wie Z.B.:
p_bla->foo_ = was_auch_immer;
Viel Spass noch,
Idriz Smaili
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Sat Jul 03, 2004 8:21 am Post subject: Re: typedefs/structs im header deklarieren... |
|
|
Idriz Smaili wrote:
| Quote: | Hi Felix,
Ich definiere die structs immer auf diese Weise, und bis jetzt hat
sich kein Compiler aufgeregt:-)
typedef struct _Bla
^^^
{
int foo_;
int baz_;
} Bla;
^^
|
Dies ist allerdings aus einem anderen Grund nicht korrekt. Bezeichner,
die mit einem Unterstrich gefolgt von einem Großbuchstaben anfangen,
sind reserviert und dürfen nicht verwendet werden.
| Quote: | Wenn Du nachher dann ein Objekt der "Klasse==Struktur" in C++/C
erzuegen willst, dann machst Du folgendes:
Bla bla = {1, 3};
oder
Bla * p_bla = (Bla *) malloc (sizeof (Bla)); /* verwende in C++ immer
den new operator */
|
In C++ wäre das typedef allerdings auch überflüssig. Entweder hälst du
alles C-kompatibel und arbeitest mit malloc, oder du lässt den typedef
einfach weg.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|