Zugriff auf einzelnes Objekt von mehreren Objekten heraus
Verfasst: Mi Aug 25, 2021 7:41 pm
Hallo zusammen,
da bin ich wieder mit einem neuen Compilerfehler.
Zum Problem:
Ich erzeuge ein Objekt auf dem Stack, welches ein Wertearray auf dem Heap erzeugt. [funktioniert]
Das Wertearray ist ein Ergebnis einer halbwegs komplexen Berechnung, die ich nicht ständig wiederholen möchte, und daher einfach die Werte abspeichere.
Ich möchte viele Objekte in einem Array instanziieren. [funktioniert]
Den vielen Objekten möchte ich jedoch beim Erzeugen einen Pointer oder eine Referenz auf das Objekt auf dem Stack geben, um die Datenhaltung etwas zu optimieren.
Sobald eines der vielen Objekte jedoch die Prozedur aufruft, welche den entsprechenden Wert im Array zurück geben soll, erhalte ich einen Laufzeitfehler.
Das Objekt auf dem Stack:
Versuche ich nun, dieses Objekt den einzelnen vielen Objekten als Pointer oder Referenz zu übergeben, fliegt mir entweder SigSegFault das Programm um die Ohren oder der Compiler mag nicht mehr.
Hier die Fehlermeldung des Compilers, wenn ich versuche die Referenz zu übergeben:
Ausschnitt aus der neuron.hh:
Wer weiß Rat?
Viele Grüße,
Lev
da bin ich wieder mit einem neuen Compilerfehler.
Zum Problem:
Ich erzeuge ein Objekt auf dem Stack, welches ein Wertearray auf dem Heap erzeugt. [funktioniert]
Das Wertearray ist ein Ergebnis einer halbwegs komplexen Berechnung, die ich nicht ständig wiederholen möchte, und daher einfach die Werte abspeichere.
Ich möchte viele Objekte in einem Array instanziieren. [funktioniert]
Den vielen Objekten möchte ich jedoch beim Erzeugen einen Pointer oder eine Referenz auf das Objekt auf dem Stack geben, um die Datenhaltung etwas zu optimieren.
Sobald eines der vielen Objekte jedoch die Prozedur aufruft, welche den entsprechenden Wert im Array zurück geben soll, erhalte ich einen Laufzeitfehler.
Das Objekt auf dem Stack:
Code: Alles auswählen
[...]
sigmoid::sigmoid(double a) {
sigValues = new uint8_t[__sigmoid_count__];
//double a = 10.0; // = 5; // = 10; // = 20;
double i, wert;
int index = 0;
for( i=-1.0; i < 1.0; i+=(2.0/__sigmoid_count__) ) {
wert = __sigmoid_max_val__ / (1.0 + exp(-a*i) );
sigValues[index] = int( wert + 0.5 );
index++;
}
}
uint8_t sigmoid::getSigValue(uint16_t index) {
return sigValues[index];
}
Hier die Fehlermeldung des Compilers, wenn ich versuche die Referenz zu übergeben:
Code: Alles auswählen
src/neuron.hh:16:43: Fehler: nicht-konstante lvalue-Referenz vom Typ »sigmoid&« kann nicht an rvalue vom Typ »sigmoid« gebunden werden
16 | sigmoid& transferFunction={};
| ^
In Datei, eingebunden von src/neuron.hh:2,
von src/neuron.cpp:1:
src/sigmoid.hh:13:9: Anmerkung: nach benutzerdefinierter Umwandlung: »sigmoid::sigmoid()«
13 | sigmoid();
| ^~~~~~~
Makefile:15: recipe for target 'obj/neuron.o' failed
make: *** [obj/neuron.o] Error 1
Code: Alles auswählen
class neuron {
private:
uint64_t uniqueID;
int InputCount;
inputConnect *inputConnections;
sigmoid& transferFunction={};
public:
uint8_t outputValue;
neuron();
neuron( uint64_t, sigmoid& );
~neuron();
[...]
Viele Grüße,
Lev