Dereferenzierung einer Funktion



  • 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
    

Anmelden zum Antworten