Probleme nach Einfügen von Headern bei Init. von Direct3D



  • Schönen guten Abend,
    ich habe ein Problem bei der Initialisierung von Direct3D und auch danach beim z.B Renderstates setzen. Der Compiler(VS 2010 Express) erkennt z.b wichtige Zeiger zum Direct3D Interface nicht mehr, was eine erfolgreiche Compilemierung unmöglich macht. Dies ist aber nur der Fall, wenn ich meine geschriebenen Header für z.B. Vectoren, Matritzen usw. in die cpp-Datei einfüge mit z.B.

    #include "matrix.h"
    

    Ich habe in meinen Headern, auch die gleiche Headerdatei vom DirecktX-SDK eingefügt, nähmlich die

    #include <d3d9.h>
    

    wie in meiner c++-Datei von der Initialisierung. Meine Frage ist nun kann dieses Mehrfacheinkopieren, obwohl alle meine Header mit

    #pragma once
    

    geschrieben sind und auch die Header vom SDK, zu solch eine Art Fehler führen??
    Es geht ja ohne meine selbstgeschriebenen Header, doch dann kann ich werder Translation, noch Rotation und weiters machen.^^
    Ich hoffe sie können mir helfen. 😃 😃



  • Warum braucht dein matrix.h die d3d9.h!?



  • Hallo,
    ich habe dort ein verschiedene Castings damit ich aus meinen z.b Vectoren einen D3DVECTOR erzeugen kann, da dies Direct3D an machen Stellen verwendet.
    (Das habe ich auch nur gelesen, bin selber noch nicht so fortgeschritten)
    MFG Louc



  • ok, nun, eigentlich sollte es prinzipiell kein Problem sein d3d9.h mehrfach zu inkludieren...



  • Ja,
    dachte ich eigentlich auch, ich denke mittlerweile, das es vielleicht nich der Direct3D Header ist sondern einer von meinen, da ich Error-Meldungen erhalte das ich Funktionen von Direct3D mehrfach definiere oder deklariere.
    Naja das scheint eine lange Nacht zu werden und morgen schön Schule XDDD.
    MFG Louc



  • Hm, naja, und du kannst nicht irgendwie dafür sorgen dass d3d9.h einfach nur einmal inkludiert wird?



  • das sind komische Fehler. Mehrfachdeklarationen sind ja erlaubt, von daher glaube ich erstmal nicht, dass es daran liegt.

    meine Kristallkugel ist kaputt und ohne ein Minimalbeispiel mit dem Fehler wirds schwierig, aber ich würde auf einen namensraum konflikt raten.

    Also in etwa sowas von der Struktur:

    //in irgendeiner Header Datei
    #include <d3d9.h>
    
    //in irgendeiner anderen header Datei waren wir blöd und
    //haben das gemacht
    namespace Foo{
    #include <d3d9.h>
    }
    
    //und dann in der src Datei
    using namespace Foo;
    //und nun führt jede Nutzung einer d3d9 Funktion zum Compilefehler.
    

    vorausgesetzt natürlich, d3d9 hat weder pragma once noch include guards. Ein Minimalbeispiel sollte dir helfen.



  • Hallo,
    Fehler gefunden, ziemlich blöd von mir XD^^
    Es war einfach nur so das manche klassen z.B Color im headen so heißen wie sie auch bei Direct3D heißen, deswegen ging da nichts mehr.
    aber vielen Dank^^ 😉 😉


Anmelden zum Antworten