Dreh gleich durch, Zeiger auf Chararray gebaut aus Int und Char zur Übergabe an Funktion



  • Moin,
    ich habe lange nicht mit C programmiert und sitze nun an einem vielleicht kleinen Problem fest, das mich nervt.

    Die Umgebung ist LabWindow CVI (ANSI C mit erweiterten Bibliotheken)

    So ist es.

    /***************************************************************************/
    Headerfile

    int openSkriptFile(int mainPanelHandle, int stepSetupPanel);
    int writeSkriptFile(int mainPanelHandle, int stepSetupPanel);
    int writeSkriptNOTFREE(int mainPanelHandle,int stepSetupPanel, char puf);
    /
    **************************************************************************/

    /***************************************************************************/
    C File

    int writeSkriptNOTFREE(mainPanelHandle, stepSetupPanel, puf)
    {
    if( (skriptNOTFREE=fopen("skriptNOTFREE.gho","a")) == NULL)
    {
    printf("Kann SKRIPTNOTFREE.GHO nicht oeffnen\n");
    return 1;
    }

    fputs(puf, skriptNOTFREE);

    return EXIT_SUCCESS;
    }
    /***************************************************************************/

    und die aufrufende Funktion
    /***************************************************************************/

    ...

    static char stepKreuz='#'; //führendes Kreuz
    static char stepperON [4] =" ON"; //Schalter an
    static char stepperOFF [5] =" OFF"; //Schalter aus
    static char delayGleich [3] = "D="; //Verzögerung
    static char paramGleich [2] = "P"; //Parameter
    static char speedGleich [3] = "V="; //Geschwindigkeit
    static char posGleich [3] = "W="; //Position
    static char accGleich [3] = "A="; //Beschleunigung

    static char ret [10];

    static char csRet = 0x0D;

    ...

    unsigned short int getAxisNo(mainPanelHandle, stepSetupPanel)
    {
    unsigned short int usiNummer = 0;
    char axisNo [10] = "";

    GetCtrlVal (stepSetupPanel, STEP_PANEL_STEP_NO, &usiNummer); //Wert aus Maske

    sprintf(axisNo,"%c%i%s%c%c",stepKreuz,usiNummer, stepperON, stepKreuz, csRet);

    writeSkriptNOTFREE(mainPanelHandle, stepSetupPanel, axisNo);

    SetCtrlVal(stepSetupPanel, STEP_PANEL_STEP_TBCOMMANDS);

    return usiNummer;
    }
    /***************************************************************************/

    Als Fehler kommt nur

    55, 1 Conflicting argument declarations for function 'writeSkriptNOTFREE'.

    Egal was ich probiere, Arrays kopieren in der Zielfunktion, den Chararray static machen, anders übergeben, vielleicht bin ich zu blöd oder einfach zu viel Java 😕

    Hat jemand ne Idee, wie ich das mache ?



  • Erstens: sfds

    Zweitens: Bei der Funktionsdefinition solltest du auch die Parametertypen angeben.



  • Das hab ich doch,
    die Definition steht in der Headerfile.

    Wenn ich in die C-File wieder die Datentypen einsetze, ist das ne erneute Deklaration der Funktion und es gibt den nächsten Fehler.

    Oder wie meinst du das ?

    michael



  • Die Deklaration (Prototyp) steht im Header, die Definition im .C File* - und letztere benötigt auch die Parametertypen (genau das sagt auch deine Fehlermeldung aus: Die Definition passt nicht zur vorigen Deklaration).

    * schau dir mal an, was der Unterschied dazwischen ist.



  • ich steh aufm Schlauch,

    kannst du mir nicht einfach sagen, was ich ändern muss ?

    Ich hab hier 3 Bücher und Googles über C, Pointer und Chararrays, aber es will nicht, wie es soll.

    Ich brauch was, was ich nach vollziehen kann.

    Danke



  • Als erstes solltest du lernen, mitzudenken (und auch zu lesen, was andere* schreiben).

    Und zweitens:
    C File:

    int writeSkriptNOTFREE(/*->*/int/*<-*/ mainPanelHandle,int stepSetupPanel, char *puf)
    {
      //rest wie gehabt
    }
    

    *inklusive deinem Compiler 😃



  • das war das was ich gemacht hab, nachdem du es das erste Mal geschrieben hattest. Jetzt geht es.

    Erstaunlicherweise funktioniert es mit den anderen Schreib- und Lesefunktionen, die ebenfalls im Header stehen, ohne die Typangabe.

    Aber ich danke dir und gelobe Besserung.
    Manchmal sieht man aber den Wald vor lauter Bäumen nicht.

    michael


Log in to reply