[gelöst]cannot convert from 'const char *' to 'char *' - Besitze unzureichnede Kenntniss



  • ^^das ist der 'const is a virus'-effekt. 😉
    das einfachste dürfte wohl sein, wenn du alle 'const' aus dem code entfernst.
    🙂



  • pumuckl schrieb:

    Abgesehen davon scheints sich bei deinem Code eher um C als um C++ zu handeln.

    Manchmal geht mir dieser Quark echt zu weit. Das ist offensichtlich kein C, sondern C++. Das ist auch eine Fehlermeldung, die es in C überhaupt nicht gibt.



  • Mein problem ist dass zwar der meiste code für die Spiel-Logik verfügbar ist aber
    leider nicht alles, zusätzlich ist der Engine Code auch nicht verfügbar.

    Von daher gehe ich davon aus dass ich solche deratigen massiven Eingriffe
    nicht mit einer realen Erfolgs-Aussicht vornehmen kann.

    Der code ist C++, und hat zum Beispiel auch auf die ID-Tech4 Engine(Doom3) Einfluß genommen. Die meisten Ideen/Techniken die die speziell an diese Engine gekoppelt waren sind heute (endlich) standard.



  • Bashar schrieb:

    Das ist auch eine Fehlermeldung, die es in C überhaupt nicht gibt.

    in C gibts mindestens ein warning.

    illustris senicis schrieb:

    Von daher gehe ich davon aus dass ich solche deratigen massiven Eingriffe
    nicht mit einer realen Erfolgs-Aussicht vornehmen kann.

    kommt drauf an. wenn du's einfach nur zum laufen bringen willst, dann: 'search and replace' in allen files und jedes auftreten des einzelnen wörtchens 'const' durch nichts ersetzen. wenn du aber bestehenden, lauffähigen code weiterentwickeln willst, dann macht man sowas natürlich nicht.
    🙂



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Bashar schrieb:

    Manchmal geht mir dieser Quark echt zu weit. Das ist offensichtlich kein C, sondern C++. Das ist auch eine Fehlermeldung, die es in C überhaupt nicht gibt.

    Das enzige, woran das offensichtlich ist, ist die Signatur - bei der ich leider nur auf die Argumente geachtet habe. mea culpa. Alles andere (char* mit diversen strXY-Funktionen, memset, atoi) ist purer C-Code.



  • Hat keiner einen Vorschlag oder eine Idee wie man dies
    innerhalb der Funktion selbst lösen könnte ? 😞


  • Mod

    Wäre das C, wäre das legal (wenn wir den C++ - spezifischen Teil wegdenken) strchr ist dort als

    char *strchr(const char *s, int c);
    

    deklariert. Offensichtlich ist das nicht const-korrekt und würde im in undefiniertem Verhalten enden, falls argRange zufällig auf ein Stringliteral zeigt. Denn diese Funktion modifiziert diesen String (Zeile 88). Folglich ist die Funktionssignatur falsch also gelogen:

    void EventArgDef::Setup( const char *eventName, const char *argName, const char *argType, char *argRange )
    

    nebst folgender Anpassungen behebt dieses Problem (wir könnten immer noch ein Literal übergeben, aber das ist eine andere Geschichte).



  • ;fricky schrieb:

    kommt drauf an. wenn du's einfach nur zum laufen bringen willst, dann: 'search and replace' in allen files und jedes auftreten des einzelnen wörtchens 'const' durch nichts ersetzen. wenn du aber bestehenden, lauffähigen code weiterentwickeln willst, dann macht man sowas natürlich nicht.
    🙂

    Also, der Pelle ist da strikt const char* != char *, also gibt's einen handfesten error. Ich hab' das const immer weggeschmissen ohne negative Wirkungen - angeblich macht es irgendwas stabiler oder sorgt für eine Typensicherung odser so.
    Ich bin vermutlich in der Hinsicht einfach ignorant, aber was ggf. blöd rummotzt, obwohl das Zeug prima läuft, wird gekillt.

    Aber vielleicht will jemand erklären, wozu das const'en wirklich gut sein soll ...


  • Mod

    pointercrash() schrieb:

    ;fricky schrieb:

    kommt drauf an. wenn du's einfach nur zum laufen bringen willst, dann: 'search and replace' in allen files und jedes auftreten des einzelnen wörtchens 'const' durch nichts ersetzen. wenn du aber bestehenden, lauffähigen code weiterentwickeln willst, dann macht man sowas natürlich nicht.
    🙂

    Also, der Pelle ist da strikt const char* != char *, also gibt's einen handfesten error. Ich hab' das const immer weggeschmissen ohne negative Wirkungen - angeblich macht es irgendwas stabiler oder sorgt für eine Typensicherung odser so.
    Ich bin vermutlich in der Hinsicht einfach ignorant, aber was ggf. blöd rummotzt, obwohl das Zeug prima läuft, wird gekillt.

    Aber vielleicht will jemand erklären, wozu das const'en wirklich gut sein soll ...

    So jemand wird es sicher geben, dieser Thread ist allerdings nicht dazu da. Zumal das Thema oft genug wiedergekäut wird.



  • camper schrieb:

    void EventArgDef::Setup( const char *eventName, const char *argName, const char *argType, char *argRange )
    

    *(Die Deklaration in der .h Datei habe ich selbstverständlich gleich mit geändert)

    Danke 🙂
    Dies hat dieses Problem erst einmal behoben, allerdings währe mir eine Umwandlung lieber gewesen.
    Da ich nicht sagen ob alles funktionieren wird, weil der code ja nur teilweisse
    zugänig ist und noch einige Fehler vorhanden sind an anderer stelle, die ich
    aber zunächst einmal selbst beheben möchte.

    Gibt es sonst keine Möglichkeit hier eine Umwandlung vorzunehmen oder macht dies absolut keinen Sinn ? 😕


  • Mod

    tokptr wird in der Funktion für verschiedene Quellen benutzt, ab Zeile 58 zeigt es in scratch und nur ab hier muss der zugrunde liegende String modifizierbar sein. Die einfachste Lösung ist also, in der Ausgangsfunktion:
    strtok als const char* zu definieren (Zeile 5), und
    in Zeile 58 einen neuen Zeiger zu definieren:

    char* tokptr = strchr( scratch, ',' );
    

    was nichts daran ändert, dass die gesamte Funktion furchtbar und viel zu lang ist und hre Eingangsdaten ungenügend prüft, was unter anderem zu einem Pufferüberlauf führen kann.



  • Noch mal danke 🙂
    Der Funktion sind weitere Funktionen vorgeschaltet.
    Ich kann erlich noch nicht die Qualität dieses codes beurteilen,
    anscheinend soll er schnell sein.


Anmelden zum Antworten