c problem
REALtime 20.10.2007 - 14:37 1132 13
REALtime
mangily d0g
|
angenommen ich habe eine funktion in der main
main.c: void main (void) { convert(100, 1000); }
berechnung1.h: convert(int count, int test);
berechnung1.c:
convert() { irgendwas....; }
berechnung2.c:
float mittelwert() { int j=0; float wert = 0.0;
for (j=0;j<count;j++) { wert = wert + array[j]; } wert = wert / count; return wert; }
ergibt logischerweise die fehlermeldung: undefined identifier
wie kann ich mir den parameter der einen funktion auch in einem anderen c file sichtbar machen ?
lg thomas
Bearbeitet von REALtime am 20.10.2007, 14:41
|
Burschi1620
24/7 Santa Claus
|
#include "berechnung1.h" (falls im selben ordner)
|
AoD
aka AngelOfDeath
|
is bei mir schon ein paar jahre her, aber damit man rekursionen mit den includes (file A includes file B includes file C includes file A .....) vermeidet gibts folgende Vorgehensweise:
kA ob die Syntax so passt.
file A: #define fileA
file B: #ifndef fileA #include fileA #endif
=> jedes file definiert eine konstante und das include wird nur gemacht, wenn die konstante noch nicht definiert wurde. Wurde sie schon definiert, bedeutet das natürlich, dass das File schon vorher eingebunden wurde.
|
REALtime
mangily d0g
|
ja include geht nicht ist schon eingebunden
|
Burschi1620
24/7 Santa Claus
|
berechnung1 hat doch mit berechnung2 nichts zu tun? Oder sehe ich das falsch?
|
jives
And the science gets done
|
Den Parameter kannst du gar nicht sichtbar machen, der existiert ausschließlich in der Funktion selbst. Entweder du lässt convert() den Parameter einfach zurückgeben, oder du arbeitest mit Pointern auf count, oder mit globalen Variablen (=böse).
|
REALtime
mangily d0g
|
wie kannch mir den count wert zurückgeben lassen ?
kannst mir ein bespiel geben mit pointer und eines mit globalen variablen ?
lg thomas
|
AoD
aka AngelOfDeath
|
warum übergibst du dieser tollen mittelwert methode nicht einfach den count parameter?
|
Blair
Big d00d
|
was willst damit überhaupt anfangen? wenn du count von außen übergibst und der wert größer als da arrayindex wird, dann schießt dir sowieso ins knie. bisserl wenig informationen gibts da, was du wie verwenden möchtest. strukturier das ganze etwas übersichtlicher, dann versteht auch jeder was du willst. derzeit kann jeder nur die kristallkugel anwerfen versuchen. wenn du die mittelwert() derzeit so hast, dann wird dich der compiler steinigen, daß du ihm weder array, noch count irgendwo definiert hast. rein von der struktur her gehe ich jetzt mal davon aus, daß du irgendwo in main() das array definierst und vollschreibst. ebenfalls in main rufst du dann die mittelwert funktion auf, die namensgebendes ausführt. dazu müßtest du ihr aber das array als parameter übergeben und den wert dann eben ausrechnen. der "count" identifier ist dann sowieso überflüssig, weil am ende von for der counter+1 eh der arraygröße entspricht (hoffentlich ). was du mit convert machen willst, kann man sich ja wirklich nur aus den fingern zuzeln...
|
Marcellus
OC Addicted
|
Als allererstes, es ist vollkommen egal in welchem file was drinnen steht, sobald du #include ... verwendest kopiert der preprozessor alle dateien zusammen. Zweitens ein pointer ist ein Zeiger auf eine variable, du initialisierst ihn üblicherweise mit zb: int *count; der große Vorteil ist, dass du einer Funktion eine Variable übergeben kannst, die dann ihre Wert auch nach dem ende der Funktion behält. Kurzes Beispielprogramm: #include <stdio.h>
void bah(int *a) { printf("bah:%i\n", *a); *a=4; }
int main() { int b=12; bah(&b); printf("main:%i\n", b); return 0; } schaus dir mal an
|
Vivo
Dreamworker
|
Sorry, aber bei dem was du da alles geproggt hast RT bekommt man ja Augenkrebs. Ich habs eben schnell so ausgebessert wie (ich glaube, dass) du es gemeint haben könntest (Kompilierbarkeit nicht garantiert) ... main.c:
#include "berechnung1.h"
#include "berechnung2.h"
void main (void) {
int meine_zahlen[] = {1, 2, 3, 4};
float mein_mittelwert;
mittelwert = mittelwert(meine_zahlen, 4);
convert(100, 1000);
}
===
berechnung1.h:
void convert(int, int);
===
berechnung1.c:
void convert(int wert_a, int wert_b) {
irgendwas....;
}
===
berechnung2.h:
float mittelwert(int[], int);
===
berechnung2.c:
float mittelwert(int array[], int count) {
int j, wert;
for (j=0;j<count;j++) {
wert = wert + array[j];
}
return (float)(wert / count);
}
Edit: Achja, da eigentlich nur mit Werten hantierst, brauchst du in diesem Fall überhaupt keine Pointer ...
Bearbeitet von Vivo am 08.11.2007, 23:42
|
Neo-=IuE=-
Here to stay
|
Edit: Achja, da eigentlich nur mit Werten hantierst, brauchst du in diesem Fall überhaupt keine Pointer ... aso und "int array[]" ist kein pointer? :P
|
Vivo
Dreamworker
|
I-Tüpferlreiter ... Jetzt hab ich extra "übersehn", dass das .. Zweitens ein pointer ist ein Zeiger auf eine variable, du initialisierst ihn üblicherweise mit zb:
int *count; ... eine Instanzierung und keine Initialisierung ist, un dann sowas ... //btw. es ist tatsächlich kein Pointer im eigentlichen Sinne
|
Marcellus
OC Addicted
|
... eine Instanzierung und keine Initialisierung ist, un dann sowas ... I-Tüpferlreiter ...
|