Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Namen mit typedef überschreiben?
Hallo
Darf man eigentlich sowas machen:
typedef struct Test_t
{
int i;
} Test_t;
Man definiert den Namen des Structs also wieder als Typ? Compilieren tut das - wenn ich einfach nur schreibe:
typedef struct
{
int i;
} Test_t;
Zeigt mir VS nämlich keinen Namen dafür an bzw. ignoriert das typdef in der IDE. Gibt es einen Grund warum man das nicht machen sollte?
danke
Neomi
2007-10-01, 12:01:03
Warum so umständlich, wenn es auch einfach geht?
struct Test_t
{
int i;
};
Danke :redface
Irgendwie war ich immer der Ansicht, daß ich dann auch z.B. struct Test_t i; statt einfach Test_t i; schreiben müßte - beim Anlegen, in Funktionsköpfen, etc.
Kann das sein, daß dies in C so war?
Matrix316
2007-10-01, 12:44:36
Hm, afaik ist das auch unter c++ noch so.
Normal sollte aber das funktionieren:
typedef struct
{
int i;
} Test_t;
und du dann später nur
Test_t i;
schreiben musst.
Vielleicht ist aber auch die Typedef Anweisung nicht global angelegt.
malte.c
2007-10-01, 12:51:14
In C++ ist es definitiv möglich, via "struct Foo { ... }" definierte Klassen über "void Bar(Foo foo)" zu verwenden. Typedef ist in diesem Zusammenhang unnötig und sollte nur verwendet werden, wenn derselbe Header auch in C verwendet wird ("extern "C" { ... }").
patermatrix
2007-10-01, 13:50:18
In C++ ist es definitiv möglich
Wird aber AFAIK von einigen (älteren) C/C++ Compilern nur in der C-Version akzeptiert. Habe ich selber noch nicht erlebt, wurde uns damals aber in der Vorlesung erzählt.
Hm, afaik ist das auch unter c++ noch so.
Nein ist es nicht. Das ist einer der Unterschiede der zwei Sprachen. In C ist "struct Foo" der Typ, in C++ aber auch "Foo" wenn man "struct Foo { ... };" deklariert:
http://www.glenmccl.com/bett_008.htm
Ich würde heute einfach C++ als besseres C benützen wenn ich wirklich prozedural programmieren muss. Das hat viele Vorteile.
Matrix316
2007-10-01, 15:54:01
Ok, dann nehme ich das zurück und behaupte das Gegenteil. ;)
Wobei man in C++ dann auch gleich class Foo {} schreiben könnte. ;)
Nein. Man könnte "class { public: ... };" schreiben. Aber für reine Daten benützt man auch in C++ normalerweise struct.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.