zu vor deklarierte Strukturen nich erkannt
-
folgendes Problem:
ich hab eine main Datei, in der ist nichts anderes als eine main funktion,
die sofort wieder beendet
und die include anweisung für eine 2. Dateiallerdings meckert er nun beim compilieren über nicht erkannte Datentypen
in Funktions-Prototypen der 2.Datei
in diesen Funktions-Prototypen werden Strukturen als Parameter benutzt (über die wird gemeckert),
die direkt davor auch als Prototyp stehendarf man etwa von Strukturen keine Prototypen machen?
oder wo liegt das Problem?
-
doch darf man glaub schon, poste doch man den code.
mfg blan
-
Es gibt keine Prototypen für Strukturen. Meinst du Vorwärtsdeklarationen?
BTW
- minimalen Code posten
- Fehlermeldungen posten
- allgemein sich nicht jedes Detail aus der Nase ziehen lassen
-
Sorry, dachte das wär allgemein so das man das nich darf
deswegen hab ich keinen Code gepostetDie Fehler-Meldungen stehen an der vom Compiler angegebenen Stelle
nicht unbedingt bei der Ursachemain-datei:
#include "Datei2.cpp" int main() { return(0); }
2.Datei:
//Prototypen struct vertex2d; struct object2d; vertex2d middle(object2d o); //parse error before vertex2d, parse error before object2d //Funktionskörper struct vertex2d { double x; double y; }; struct object2d { vertex2d *v; int length; char color; }; vertex2d middle(object2d o) { //irrelevant }
-
dann steck den funktionsprototypen eben unter die struturdefinitionen.
-
hab ich jetzt auch versucht
macht aber keinen Unterschied
er findet die ganzen Strukturen immernoch nichtkomisch...
-
in C++ ist das irrelevant, aber in C++ gibt es einen Unterschied zwischen "struct xyz" und "xyz" - also entweder du verwendest den kompletten Typnamen oder du nutzt typedef's:
//Möglichkeit a: struct vertex2d; struct object2d; struct vertex2d middle(struct object2d o); ... //Möglichkeit b: typedef struct _vert vertex2d; typedef struct _obj object2d; vertex2d middle(object2d); struct _vert {...}; struct _obj {...};
-
oder:
//Prototypen typedef struct _vertex2d { double x; double y; } vertex2d; typedef struct _object2d { vertex2d *v; int length; char color; } object2d; vertex2d middle(object2d o); //parse error before vertex2d, parse error before object2d //Funktionskörper vertex2d middle(object2d o) { //irrelevant }
-
http://c-faq.com/struct/typedef.html
Edit: Ich bin heute einfach langsam...
-
wusst ich noch gar nich
werd ich gleich mal ausprobieren
is weil ich meißtens C++ geproggt hab
-
also bei der typedef Mehtode meckert er:
warning: useless keyword or type name in empty declaration
(in der Zeile in der ich typedef struct ... aufrufe)und wenn ich immer struct davorschreibe (was ich aber eigentlich lieber bleiben lassen will)
meint er bei
struct vertex2d middle(struct object2d o);
warning: parameter has incomplete type
-
Zeig doch mal deinen jetzigen Code. Und welchen Compiler nutzt du?
-
ich benutz dev-c++, also mingw
so sieht das ganze aus:typedef struct vertex2d; typedef struct object2d; vertex2d middle(object2d o); struct vertex2d { double x; double y; }; struct object2d { vertex2d *v; int length; char color; }; vertex2d middle(object2d) { }
-
A) Wenn Du C++ compilierst brauchst Du kein typedef.
Forward-Deklaration funktioniert nur solange über den Typ nichts genaueres bekannt sein muss als der Name.
struct vertex2d; struct object2d; vertex2d middle(object2d o); struct vertex2d { double x; double y; }; struct object2d { vertex2d *v; int length; char color; }; vertex2d middle(object2d) { }