doppelt Deklaration in inkludierten Headern



  • Du hast zwei Bibliotheken in dein Projekt eingebunden, die beide eine Methode WINGDIAPI bereitstellen, und willst beide in einer Programmdatei verwenden, richtig?

    Da fiele mir im Moment nur ein den gesamten Header in einen Namespace zu packen und dann mit dem ... :: operator auf die passende Methode zuzugreifen. Ich weiß aber nicht ob das funktioniert.



  • YAK schrieb:

    danke für die schnelle Antwort 🙂
    ich fürchte das hilft mir wenig; 😞 denn ich importiere ja nicht den gleichen Header 2 mal , sondern zwei andere Header (vcl.h und glut.h [beide nicht von mir und beide mit dlls deshalb kann ich nicht einfach umbenennen]), die zwei Methoden mit gleichem Namen deklarieren

    Dann verwende Namensbereiche zum Gliedern der Struktur, so vermeidest Du, dass die Namen im selben Bereich neudefiniert werden. Also:

    namespace vcl {
    #    include <vcl.h>
    }
    
    namespace glut {
    #     include <glut.h>
    }
    

    /EDIT: Das war ja mal ne beschissene Idee … *kopfschüttel* ne ne, so findet der Linker ja die entsprechenden Symbole nicht mehr.



  • Zumal WINGDIAPI ein Makro zu sein scheint.
    Das Problem liegt wohl an einer fehlerhaften glut-Konfiguration.
    siehe hier
    http://www.gantless.com/borland.html



  • danke für die Vorschläge!
    das mit den namespaces hat irgendwie nicht geklappt. 😞 Auch ich dachte das es klappen müsste, liegt wohl daran des WINGDIAPI kein Typ ist der deklariert wird
    sondern <stehtdaunten>
    @Helfer nein keine Methode. ich dachte ein Typ, aber ich konnte keine Deklaration dieses types finden, allerdings stand irgendwo "#undefine WINGDIAPI" in der glut.h (also hat Braunstein recht mit makro, oder?)
    die defines sind ja anscheinend global und unabhängig von namespaces dashalb hat das nicht geklappt

    Braunsteins Link hat auch nicht geholfen -den hat ich auch schon (trotzdem danke)- , da ich 1. kein Konsolen sondern das Bordland gui Zeug brauche und ich 2. die winmain() benutze [mein englisch ist nicht das beste vielleicht habe ich falsch verstanden]

    ich hätte noch die Idee 💡 das sowohl gl als auch vcl irgendwas inkludieren das keinen includeguard hat 😡 (wie includeguard)

    Mist 😕

    thx an alle die mir helfen (wollen)
    YAK 👍

    PS: Hier nochmal die genaue Fehlermeldung:

    [C++ Fehler] gl.h(1153): E2141 Fehler in der Deklarationssyntax
    [C++ Fehler] gl.h(1154): E2238 Bezeichner 'WINGDIAPI' mehrfach deklariert
    [C++ Fehler] gl.h(1153): E2344 'WINGDIAPI' bereits deklariert
    


  • YAK schrieb:

    ...
    das mit den namespaces hat irgendwie nicht geklappt. 😞 ...

    🙄 🙄
    ...was Dir Konrad Rudolph ja schon gestern vorhergesagt hat:

    Konrad Rudolph schrieb:

    /EDIT: Das war ja mal ne beschissene Idee … *kopfschüttel* ne ne, so findet der Linker ja die entsprechenden Symbole nicht mehr.

    Merke: Meistens lohnt es sich, Antworten bis zum Ende zu lesen...

    Zur Lösung muss ich sagen: Wenn Du zwei Libs brauchst, die dieselben Symbole mit unterschiedlichen Definitionen beinhalten, hast Du mit Standardmethoden verka**t.
    Genau deswegen wurden ja namespaces eingeführt und wenn Dein Lib-Provider die nicht verwendet hat, musst Du Dich bei dem beschweren.
    Ansonsten kannst Du eigentlich nur noch "hacken"...

    Gruß,

    Simon2.



  • evtl. geht das was du willst gar nicht.
    Hier mal ein Zitat aus http://members.cox.net/scottheiman/opengl.htm

    ...You should not mix GLUT with the VCL. GLUT is essentially an interface with the Windows API. This interface will probably conflict with the VCL application class. ...

    Wenn du also OpenGL mit dem BCB machen willst, mußt du wohl auf glut verzichten.



  • hmm shit
    ich habe die antwort übringenst bis zu ende gelesen

    Konrad Rudolph schrieb:

    /EDIT: Das war ja mal ne beschissene Idee … *kopfschüttel* ne ne, so findet der Linker ja die entsprechenden Symbole nicht mehr.

    bezog sich doch nur auf seine lösung nicht auf die vom "Helfer"
    das dll hacken sprengt den rahmen
    YAK
    PS:mir ist gerade aufegefallen das es irgendwie doch ein bischen geht poste dann ...



  • YAK schrieb:

    hmm shit
    ich habe die antwort übringenst bis zu ende gelesen
    […] bezog sich doch nur auf seine lösung nicht auf die vom "Helfer"

    „Helfer“ hat doch prinzipiell dasselbe vorgeschlagen wie ich.



  • Stimmt,....hatte deine ein bisschen anders um gesetzt
    und außerdem ging die von Helfer eigentlich schon wenn das keine Makro oder was auch immer wäre sondern ..ach egal

    ach sch... ich habe keine Lust auf Bordland mehr 😞 😞

    und auf c++ auch nicht

    so und nach folgender aussage ist wohl auch niemand mehr willig mir zu helfen :
    🙂 JAVA 🙂 ist viel schöner 😃



  • YAK schrieb:

    hmm shit
    ich habe die antwort übringenst bis zu ende gelesen

    Konrad Rudolph schrieb:

    /EDIT: Das war ja mal ne beschissene Idee … *kopfschüttel* ne ne, so findet der Linker ja die entsprechenden Symbole nicht mehr.

    bezog sich doch nur auf seine lösung nicht auf die vom "Helfer"
    ...

    OK, das hatte ich mißverstanden. Aber der Ansatz mit den "im Nachhinein getrennten namespaces" bringt immer das von Konrad erwähnte Problem.

    Insgesamt ein gutes Beispiel dafür, warum Makros immer nur die letzte Möglichkeit sein sollten. 😃

    YAK schrieb:

    ...
    🙂 JAVA 🙂 ist viel schöner 😃

    Glaubst Du, in Java gibt es keine schlecht designten Libs ? 😉
    Mir scheint, dass Du hier wieder den klassischen Javaistenfehler begehst und "Produkt" mit "Sprache" verwechselst.

    Gruß,

    Simon2.



  • Hi

    Simon2 schrieb:

    Glaubst Du, in Java gibt es keine schlecht desingten Libs ? 😉

    Nein, aber zum Beispiel solche Fehler kann es in Java nicht geben und man kann Java Klassen auch leicht wieder zu relativ lesbaren Code reprecompilen oder einfach eine Enkelklasse erstellen und den fehlerhaften Code selbstschreiben und dann Fehler beheben; Ich finde C++ Code halt so hässlich. In Java ist durch die vollständige objektorientiertheit alles so klar. (Ich sage übrigens nicht, dass c++ schlechter als Java ist, sondern, dass der c++ Code hässlicher ist)
    Aber diese Diskussion gehört nicht hier her.

    ich mache das Beinfenster jetzt wahrscheinlich einfach mit GLUT, werde also selbst wahrscheinlich keine Lösung posten
    Danke für eure Bemühungen 🙂 baba



  • sry schlechter Satzbau
    sry wegen double posting bin nicht registriert

    nochmal Danke an alle
    baba



  • Stimmt - je weniger Möglichkeiten eine Sprache hat, desto weniger kann man fehlerhaft einsetzen: Lang lebe die Turingmaschine ! In Basic kann man z.B: auch viele Fehler nicht machen, die man in Java machen kann ... 😉

    Ich finde Javasyntax häßlich ... und schon bleibt von Deinem Argument nicht mehr viel übrig.

    Gruß,

    Simon2.



  • jaja ist ja gut, [diese Diskussion gehört hier wirklich nicht hin, außerdem würde diese Diskussion ewig (natürlich nicht aber halt lange) gehen].
    Abgesehen davon das die Java Syntax sich nicht von der c++ Syntax unterscheidet. abgesehen davon, dass es die hässlichen befehle wie goto oder (ok das ist nicht bestandteil der sprache) Compilerdirektiven nicht gibt. Dann war das kein Argument sondern eine Feststellung.
    Und was die möglichkeiten angeht die Java bietet: Mehr brauche ich (in Java) nicht. für z.B. höhere Geschwindigkeiten z.B. einfache Simulationen habe ich ja andere Sprachen, es ist halt aufwändiger in ihnen zu programmieren...... aber egal übrigens habe ich für das Projekt für das ich diesen thread geöffnet habe nur in c++ gemacht weil mein Kollege kein Java kann und es auch nicht lernen kann, und ich c++ lernen wollte. hm naja baba
    YAK



  • YAK schrieb:

    ...
    Abgesehen davon das die Java Syntax sich nicht von der c++ Syntax unterscheidet....

    Wie kannst Du dann die eine schön und die andere häßlich finden ?

    YAK schrieb:

    ...
    Mehr brauche ich (in Java) nicht. ...

    "....Mehr 64 KB wird nie ein Computer brauchen ...." 😃
    Kein Problem, wenn Du Dich beschränken möchtest und durch die Mehrmöglichkeiten anderer Sprachen verunsichert fühlst - aber persönlich anders zu entscheiden, ist weder ein Charakter- noch ein Ästhetikmangel.

    Gruß,

    Simon2.


Anmelden zum Antworten