struktur an funktion übergeben?
-
hi
ich möchte in meinem programm folgende strukturvariable an eine incluierte datei übergeben:
#include "datei.h" struct eingabewerte{ double erdbeschl; // Erdbeschleunigung max. 4 Stellen char fluidname[255]; // Fluid max. 10 Stellen double fluiddichte; // Fluiddichte max. 4 Stellen int modellart; // 1-Tiravib, 2-Schubert, 3-Partikel int status_param; // Status der Parameterauswahl 0-3 int dem_fall; // Fall von Modell Partikel_DEM 0-... char fallbeschreibung[5][255]; // Kurzbeschreibung für Fall-Modell DEM int mischv_status; // Mischungsverhältnis --> 0-Volumenanteil 1-Masseanteil double mischv_anteil1; // Mischungsverhältnis Anteil Stoff1 (Volumenanteile) double dichte[2]; // Dichte von Stoff 1 und 2 (0 bzw. 1) double korndurchm[2]; // Korndurchmesser von Stoff 1 und 2 (0 bzw. 1) double cw_wert[2]; // Cw-Wert von Stoff 1 und 2 (0 bzw. 1) }eingabe;
meine funktion rufe ich dann so in der main.cpp auf:
test(eingabe);
meine datei.h sieht so aus:
#include <windows.h> void test(eingabewerte eingabe2);
und meine datei.cpp so:
#include "datei.h" void test(eingabewerte eingabe2) { // mache was mit eingabe2... }
leider geht es so nicht. wie muss die datei.h und die datei.cpp aussehen, damit es geht.
habe schon viel gelesen und probiert, habe da aber wohl einen denkfehler drinne.vielen dank
slower
-
Deine Struktur ist noch nicht bekannt wenn der Header inkludiert wird.
Liesmal hier:
http://www.c-plusplus.net/forum/topic,4751.html
Ist nicht ganz was Du hast, dürfte DIr aber das verständnis dazu geben.
-
hhhmmm also das hat mich jetzt noch mehr verwirrt. vielleicht ist ja einer so gnädig, mir das an meinem bsp. zu erklären?
wäre echt super
-
-Befindet sich die Strukturdefinition von der Funktionsdekalration?
Der normale Aufbau ist
#include <a.h> // andere includes // Strukturdefinitionen struct eingabewerte { //... }; // Globale nur falls nötig //... // Funktionsprototypen void test(eingabewerte eingabe2); //.... // Funktionen void test(eingabewerte eingabe2) { // mache was mit eingabe2... }
Wenn man diese Reihenfolge einhält kann man die Punkte Strukturdefiniton einschließlich Funktionsprototypen in eine oder mehrere Headerdateien auslagern. Diese Reihenfolge ist sinnvoll da man im Normalfall nur auf vorher bekannte Dinge zugreifen kann.
Nächste Frage was willst du in test machen. So wie du sie deklariert hast kannst du die Daten in eingabe2 in der Funktion nicht so ändern das sie auch in der aufrufenden Funktion geändert sind.
Falls du das möchstest musst du folgendes Schreiben.// Funktionen void test1(eingabewerte &eingabe2) { *eingabe2.status_param=23; // mache was mit eingabe2... }
Falls noch weitere Fragen sind wir sind neugierig.
Willst du eigentlich ein C oder ien C++ Programm schreiben. Die Konstrukte die du benutzt sind eher typisch für C. So wie das aussieht würde sich in C++ dafür ein Klassendefinition anbieten.
-
PAD schrieb:
#include <a.h> // andere includes // Strukturdefinitionen struct eingabewerte { //... }; // Globale nur falls nötig //... // Funktionsprototypen void test(eingabewerte eingabe2); //.... // Funktionen void test(eingabewerte eingabe2) { // mache was mit eingabe2... }
allerdings ist das dann call by value und bei solch einer großen struktur nicht gerade atemberaubend schnell. eine andere möglichkeit wäre:
//datei.h #include <what_ever> struct eingabewerte; //vorwärts-deklaration void test1 (const eingabewerte &); //eingabewerte.h struct eingabewerte{ double erdbeschl; // Erdbeschleunigung max. 4 Stellen char fluidname[255]; // Fluid max. 10 Stellen double fluiddichte; // Fluiddichte max. 4 Stellen int modellart; // 1-Tiravib, 2-Schubert, 3-Partikel int status_param; // Status der Parameterauswahl 0-3 int dem_fall; // Fall von Modell Partikel_DEM 0-... char fallbeschreibung[5][255]; // Kurzbeschreibung für Fall-Modell DEM int mischv_status; // Mischungsverhältnis --> 0-Volumenanteil 1-Masseanteil double mischv_anteil1; // Mischungsverhältnis Anteil Stoff1 (Volumenanteile) double dichte[2]; // Dichte von Stoff 1 und 2 (0 bzw. 1) double korndurchm[2]; // Korndurchmesser von Stoff 1 und 2 (0 bzw. 1) double cw_wert[2]; // Cw-Wert von Stoff 1 und 2 (0 bzw. 1) }eingabe; //wozu gleich eine instanz erstellen? //datei.cpp - hier die implementierung #include "eingabewerte.h" void test1(const eingabe &e) { //... } //main.cpp #include "datei.h" #include "eingabewerte.h" int main () { eingabewerte blub; test1(blub); }
allerdings könnte die funktiondeklaration test1 auch besser zur datei mit definition der struct passen. kommt dann drauf an.
-
Ich hab mich momentan an die C-Lösungen gehalten, da für mich nicht klar ist ob er das Programm in C oder C++ schreiben möchte.
Der Code sieht nach C aus, auch wenn er im C++ postet
-
ich danke euch beiden sehr!
verwende jetzt die variante von DAVIE, genau so wollte ich es haben.
aber auch die variante von PAD, hat mir beim verstehen gaholfen. mir ist jetzt einiges klarer.thx slower