C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

typedefs/structs im header deklarieren...

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Felix Kater
Guest





PostPosted: Wed Jun 23, 2004 2:03 pm    Post subject: typedefs/structs im header deklarieren... Reply with 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

--
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





PostPosted: Wed Jun 23, 2004 2:17 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote



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





PostPosted: Wed Jun 23, 2004 2:28 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote



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





PostPosted: Wed Jun 23, 2004 2:36 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 2:38 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 2:44 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 5:45 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 7:58 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 8:10 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Wed Jun 23, 2004 9:47 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

Hallo!

Tibor Pausz <pausz (AT) stud (DOT) uni-frankfurt.de> wrote:
Quote:
[...]

Sinvoller wäre das ganze so zu schreiben

Ergänze:

Quote:
// struct1.h

#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





PostPosted: Wed Jun 23, 2004 9:47 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Thu Jun 24, 2004 2:04 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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 Wink

Die Compiler vertreten eine andere Meinung Wink 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





PostPosted: Fri Jul 02, 2004 10:20 pm    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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





PostPosted: Sat Jul 03, 2004 8:21 am    Post subject: Re: typedefs/structs im header deklarieren... Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.