Arbeit mit Pointern
-
das ist c, und nicht c++
wins werden gleaub ich mit einem zufallswert initialisiert, somal du sie nciht initialisiert hast!
-
It0101 schrieb:
void ModifyNeuron(Tneuron kohonen) [...]Vergleiche ich die daten vor und nach dem aufruf der funktion, stelle ich fest, dass die kohonen.weights alle ordnungsgemäß verändert werden, und die kohonen.wins aber eben nicht!!
Das liegt daran, dass du der Funktion ModifyNeuron eine Kopie eines Objektes übergibst (=> Call-by-Value), d.h. du kannst das Original nicht verändern. Die weights ändern sich trotzdem, weil es sich um eine flache Kopie handelt, d.h. es wird zwar der weights-Zeiger kopiert, aber er zeigt auf das gleiche wie im Original.
Lösung: Call-by-Reference:
void ModifyNeuron(Tneuron& kohonen) { ...
-
ser1al schrieb:
das ist c, und nicht c++
Falsch, es ist C, und es ist C++.
-
Ich war eben schon so verzweifelt dass ich kurz davor stand , dass ganze array global zu machen, um mir die parameterübergabe zu ersparen, aber ich wollts doch gern ordentlich machen und auf globale variablen verzichten

-
Dann passt eine Referenz doch ganz gut...
-
ok ich werds mit der referenz versuchen
-
ok nächste problem, habe jetzt das ganze programm komplett auf ANSI C umgestellt, nun bemängelt der compiler aber die referenz & und quittiert das mit
... main.c syntax error before '&' token
gibts in ANSI C keine referenzen?
PS: sry 4 AnsiC frage, wollte nich extra nen neuen thread machen...
-
Nein, die sind eine neue Erfindung in C++ (in C mußt du Pointer verwenden und von Hand dereferenzieren).
-
diese funktion
void ModifyNeuron(Tneuron& kohonen) { ...[/quote]
müsste dann so aussehen?
void ModifyNeuron(Tneuron* kohonen) { ...[/quote]
oder nicht?
ich bin da im moment etwas ratlos, weil ich eigentlich bisher noch nicht das vergnügen mit ANSI C hatte...
-
Richtig.
-
ok, ich hab jetzt bei allen zugriffe auf das element die alte variante
kohonen.winsentfernt und durch
kohonen->winsersetzt, weil mir sonst der compiler die hucke voll gehauen hätte

nun krieg ich aber nen problem mit dem aufruf der funktion
ModifyNeuron(kohonen[0]);der lautet folgendermaßen:
main.c incompatible type for argument 1 of `ModifyNeuron'
ich vermute er sucht hier nach mehreren objekten und bekommt von mir natürlich nur eines....
-
Nein, für die Übergabe als Pointer mußt du die Adresse des Ziels weitergeben:
ModifyNeuron(&kohonen[0]); //oder ModifiyNeuron(kohonen);
-
ahja ok danke euch, jetzt funzt es
