 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Walther Ypsilanti Guest
|
Posted: Sun Mar 06, 2005 8:44 pm Post subject: Definition vs Deklaration |
|
|
Hallo,
ich habe Schwierigkeiten damit, für folgende Definitionen eine
Deklaration zu schreiben, die keine Definition ist. Die sind aus der
Übung 2 vom Abschnitt 4.11 der Bibel:
1) typedef complex<short> Point;
2) enum Beer {Carlsberg, Tuborg, Thor};
3) namespace NS {int a};
So wie die Aufgabe gestellt ist, scheint das aber Was verstehe ich
nicht/falsch?
Walther
--
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 |
|
 |
Thomas Maeder Guest
|
Posted: Sun Mar 06, 2005 10:28 pm Post subject: Re: Definition vs Deklaration |
|
|
Walther Ypsilanti <opllqo2004 (AT) yahoo (DOT) de> writes:
| Quote: | ich habe Schwierigkeiten damit, für folgende Definitionen eine
Deklaration zu schreiben, die keine Definition ist. Die sind aus der
Übung 2 vom Abschnitt 4.11 der Bibel:
1) typedef complex<short> Point;
|
Das ist bereits eine Deklaration, welche keine Definition ist.
| Quote: | 2) enum Beer {Carlsberg, Tuborg, Thor};
|
enum-Typen kann man nicht deklarieren, ohne sie zu definieren.
| Quote: | 3) namespace NS {int a};
|
namespace NS
{
extern int a;
}
--
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 |
|
 |
Stefan Reuther Guest
|
Posted: Sun Mar 06, 2005 10:51 pm Post subject: Re: Definition vs Deklaration |
|
|
Walther Ypsilanti wrote:
| Quote: | ich habe Schwierigkeiten damit, für folgende Definitionen eine
Deklaration zu schreiben, die keine Definition ist. Die sind aus der
Übung 2 vom Abschnitt 4.11 der Bibel:
1) typedef complex<short> Point;
|
Das ist eine Typdefinition. Die kann man nicht deklarieren.
| Quote: | 2) enum Beer {Carlsberg, Tuborg, Thor};
|
Gleichfalls. gcc versteht als Erweiterung 'enum Beer;', aber das ist
nicht Standard. "Vorwärtsdeklarieren" kann man in C++ nur Klassen.
| Quote: | 3) namespace NS {int a};
|
Den Namespace kann man nicht deklarieren, wohl aber Variablen:
namespace NS { extern int a; }
| Quote: | So wie die Aufgabe gestellt ist, scheint das aber Was verstehe ich
nicht/falsch?
|
Manchmal ist 'geht nicht' eben auch eine richtige Antwort.
Stefan
--
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 |
|
 |
Thomas Maeder Guest
|
Posted: Mon Mar 07, 2005 4:51 pm Post subject: Re: Definition vs Deklaration |
|
|
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
| Quote: | 1) typedef complex<short> Point;
Das ist eine Typdefinition. Die kann man nicht deklarieren.
|
Was wird denn hier definiert?
--
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 |
|
 |
Stefan Reuther Guest
|
Posted: Mon Mar 07, 2005 6:00 pm Post subject: Re: Definition vs Deklaration |
|
|
Thomas Maeder wrote:
| Quote: | Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
1) typedef complex<short> Point;
Das ist eine Typdefinition. Die kann man nicht deklarieren.
Was wird denn hier definiert?
|
Ein Typ namens 'Point'.
Ich würde das durchaus als Definition bezeichnen. Auf einen Streit würde
ich's aber eher nicht ankommen lassen. Zumindest ist meine Ausgabe des
Stroustrup (3. Auflage von 1998) da eh nicht ganz konsistent. Um gleich
mal die ersten beiden Sätze von 4.9.7 zu zitieren (Hervorhebung von
mir): "Eine Deklaration mit dem Präfix texttt{typedef} *deklariert*
einen neuen Namen für den Typ [...] Ein so *definierter* Name,
gewöhnlich als »textit{typedef}« bezeichnet, [...]"
Eine Deklaration, die keine Definition ist, müsste hier z.B. aussagen,
dass 'Point' ein Typ ist, aber nicht welcher. Und so etwas gibt es nicht.
Stefan
--
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: Mon Mar 07, 2005 6:16 pm Post subject: Re: Definition vs Deklaration |
|
|
Stefan Reuther wrote:
| Quote: | Thomas Maeder wrote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
1) typedef complex<short> Point;
Das ist eine Typdefinition. Die kann man nicht deklarieren.
Was wird denn hier definiert?
Ein Typ namens 'Point'.
|
Nein, es wird kein Typ definiert. Den Typ gab es schon vorher. Er bekommt
lediglich noch einen anderen Namen. Das Schlüsselwort hätte statt 'typedef'
besser 'alias' geheißen.
| Quote: | Ich würde das durchaus als Definition bezeichnen. Auf einen Streit würde
ich's aber eher nicht ankommen lassen. Zumindest ist meine Ausgabe des
Stroustrup (3. Auflage von 1998) da eh nicht ganz konsistent. Um gleich
mal die ersten beiden Sätze von 4.9.7 zu zitieren (Hervorhebung von
mir): "Eine Deklaration mit dem Präfix texttt{typedef} *deklariert*
einen neuen Namen für den Typ [...] Ein so *definierter* Name,
gewöhnlich als »textit{typedef}« bezeichnet, [...]"
Eine Deklaration, die keine Definition ist, müsste hier z.B. aussagen,
dass 'Point' ein Typ ist, aber nicht welcher. Und so etwas gibt es nicht.
|
struct Foo;
typedef Foo Blah;
Was wird hier definiert?
--
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 |
|
 |
Stefan Reuther Guest
|
Posted: Mon Mar 07, 2005 6:47 pm Post subject: Re: Definition vs Deklaration |
|
|
Rolf Magnus wrote:
| Quote: | Stefan Reuther wrote:
1) typedef complex<short> Point;
Das ist eine Typdefinition. Die kann man nicht deklarieren.
Was wird denn hier definiert?
Ein Typ namens 'Point'.
Nein, es wird kein Typ definiert. Den Typ gab es schon vorher. Er bekommt
lediglich noch einen anderen Namen. Das Schlüsselwort hätte statt 'typedef'
besser 'alias' geheißen.
|
Dann wird eben ein Aliasname definiert.
Wie gesagt, auf einen Streit über Worte würde ich mich hier nicht
einlassen. Die im OP zitierte Aufgabe ist jedenfalls für diese Zeile
nicht lösbar, vollkommen gleich, ob wir den typedef (NB: typedef, nicht
typedecl) als Definition oder Deklaration bezeichnen.
| Quote: | Eine Deklaration, die keine Definition ist, müsste hier z.B. aussagen,
dass 'Point' ein Typ ist, aber nicht welcher. Und so etwas gibt es nicht.
struct Foo;
typedef Foo Blah;
Was wird hier definiert?
|
Es wird definklariert, dass 'Blah' der gleiche Typ ist wie 'Foo'.
Ein Sprachmittel, welches nur aussagt, dass 'Blah' ein Typedef-Name ist,
nicht jedoch, welcher Typ sich dahinter verbirgt, gibt es nicht.
Stefan
--
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
|
|