Dereferenzierung einer Funktion
-
Hallo Leute,
ich habe ein Programm bestehend aus Klasse "mcDSA" und "ARM". In der Klasse "mcDSA" ist die Funktion "OnPDOReeiveD" definiert als:
"virtual void OnPDOReceived(uint32 cob_id, uint8 len, uint8* data)(
...
}"wobei "uint 32", "uint8" mittels "typedef" als eigenständige Typen definiert sind.
Die Klasse "mcDSA" ist über die "#include"-Anweisung in die Klasse "ARM" eingebunden.
In der Klasse "ARM" möchte ich nun über einen Zeiger "p_Controller" die Funktion dereferenzieren:"p_Controller ->OnPDOReceived(0x3762,8,&data);"
Hierbei liefert der Compiler nach dem Debuggen den Fehler: "error C2065 data nicht deklarierter Bezeichner".
Was mache ich verkehrt? Vielen Dank für eure Hilfe!
-
Man kann Zeiger dereferenzieren, Funktionen ruft man auf. Und du hast, wie die Fehlermeldung sagt, keine Variable
data
definiert, deren Adresse du mittels&data
zu nehmen versuchst.
-
Hi,
du brauchst wohl ein uint8-Array, das die Daten enthält. Hast du kein Daten-Array?
-
Ein Daten-Array habe ich nicht. Über den CAN-Bus sollen die erhaltenen Daten auch in dieses Array reingeschrieben werden
-
C++Pete schrieb:
Ein Daten-Array habe ich nicht.
Dann musst Du Dir wohl eins definieren.
uint8 data[8]={};
Logisch, oder?
Weitermachen!
-
Dann definiere dir dafür ein Array:
uint8 data[8];
Du solltest aber schon die Grundlagen von C++ beherrschen, bevor du dich an die Nutzung externer Libraries machst...
-
Warum gerade ein uint8 array?
-
Der Autor hat vorn paar Wochen schonmal nen Thread eröffnet, ähnliche Frage und sowas alles. hier
Irgendwie stimmt da was nicht oO
edit:
C++Pete schrieb:
"p_Controller ->OnPDOReceived(0x3762,8,&data);"
Hierbei liefert der Compiler nach dem Debuggen den Fehler: "error C2065 data nicht deklarierter Bezeichner".
Das geht ja schonmal gar nicht. Der Debugger läuft mit dem Programm. Der Compiler erstellt das Programm. Ergo: Ohne Programm kein Debuggen, und keine Debugfehlermeldung beim Compilen.
-
Das war nicht meine Frage
-
ein uint8 array weil die funktion einen zeiger auf einen uint8 verlangt. ist doch logisch
-
C++Pete schrieb:
, uint8* data)(
...
}
-
Wenn ich vor der Dereferenzierung des Zeigers ein Array folgendermaßen deklariere:
"uint8 data[8];
p_MotorControllers->OnPDOReceived(0x3762,8,&data);"kommt immer die Fehlermeldung:
2>C:\consys\apps\actuators\aManipulator\MAN_ARM5E.cpp(305): error C2664: 'mcDSA_ARM5E::OnPDOReceived': Konvertierung des Parameters 3 von 'uint8 (*)[8]' in 'uint8 *' nicht möglich
2> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
2>Was mache ich verkehrt?
-
Probiers mit:
uint8 data[8]; p_MotorControllers->OnPDOReceived(0x3762,8,data);
Oder mit:
uint8 * data = nullptr; p_MotorControllers->OnPDOReceived(0x3762,8,data);
Oder mit:
uint8 * data = new uint8[8]; p_MotorControllers->OnPDOReceived(0x3762,8,data);
Je nachdem, was gebraucht oder verlangt ist. Aber sind sprachliche Grundlagen...
-
vll. ist es dir - te - nicht bewusst aber ein array ist grundsätzlich wie ein zeiger nutzbar. daher ist der dereferenzierungsoperator fehl am platz.
int array[2]; int *pointer = array; //funktioniert wunderbar und ist definiertes verhalten