tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
4707
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MSAB MSAB ist offline Mitglied Silber
    Registriert seit
    Aug 2006
    Beiträge
    54
    N'abend, ich bin neu hier und lerne auch erst seit kurzem C++. Daher habe ich mir aus verschiedenen Tutorials was zusammengeschrieben. Nur jetzt knabbere ich seit ein paar Tagen an einer Fehlermeldung die partout nicht weggehen möchte.
    Das "Programm" funktioniert auch wunderbar, bis auf die Funktion "Grafik_initalisieren", denn nehme ich den Befehl "Grafik_initalisieren();" heraus, kann er ihn fehlerlos compilieren.

    Ich benutze als Compiler Visual C++ 2005 Express Edition.



    Als Fehlermeldung erhalte ich folgende:

    1>MAIN.obj : error LNK2028: unresolved token (0A000025) "void __cdecl Grafik_initalisieren(void)" (?Grafik_initalisieren@@$$FYAXXZ) referenced in function "bool __cdecl Bild_erstellen(void)" (?Bild_erstellen@@$$FYA_NXZ)
    1>MAIN.obj : error LNK2019: unresolved external symbol "void __cdecl Grafik_initalisieren(void)" (?Grafik_initalisieren@@$$FYAXXZ) referenced in function "bool __cdecl Bild_erstellen(void)" (?Bild_erstellen@@$$FYA_NXZ)
    1>C:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\Engine\Debug\Engine.exe : fatal error LNK1120: 2 unresolved externals

    Hier ist nochmal der gekürtzt Code, und ich hoffe ich habe nichts vergessen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    
    ///////////////////////////////////Header//////////////////////////////////
    #include <windows.h>
    #include <d3d9.h>
     
    ////////////////////////////////////Globale Variablen//////////////////////
    //Direct X
    LPDIRECT3D9             D3D9                    ;
    LPDIRECT3DDEVICE9       D3D9Dev          = NULL ;
    LPDIRECT3DVERTEXBUFFER9 D3DVertexBuffer9 = NULL ;
     
    //Für Fenster
    HWND hWnd;
     
    //Für Bildschrimgröße
    int nBreite = GetSystemMetrics(SM_CXSCREEN);
    int nHoehe  = GetSystemMetrics(SM_CXSCREEN);
     
    //Für Framebremse
    DWORD dwStartzeit;
     
    /////////////////////////////////////Funktionen/////////////////////////////
     
    bool Bild_erstellen       (void);
    void Bild_rendern         (void);
    void Programm_beenden     (void);
    void Grafik_initalisieren (void);
     
    /////////////////////////////////////Strukturen/////////////////////////////
     
    struct VERTEX {float x , y , z , rhw ; DWORD color ;};
    #define COSTUMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE )
     
    /////////////////////////////////////CallBack-Funktion//////////////////////
     
    LRESULT CALLBACK WindowProc (HWND hWnd , UINT Msg , WPARAM wParam , LPARAM lParam)
    {gekürzt}
     
    ///////////////////////////////////////WinMain-Funktion///////////////////////
     
    int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , 
                         LPSTR     lpCmdLine , int       nShowCmd      ) 
    {gekürtz};  
     
    /////////////////////////////////////////////PHASE 1////////////////////////////////
    bool Bild_erstellen(void) 
    {
            //Present Parameter festlegen und Eingeschaften bestimmen
            D3DPRESENT_PARAMETERS D3DPP;
     
            SecureZeroMemory(&D3DPP , sizeof(D3DPP));
            D3DPP.hDeviceWindow    = hWnd                  ;
            D3DPP.Windowed         = false                 ;
            D3DPP.SwapEffect       = D3DSWAPEFFECT_DISCARD ;
            D3DPP.BackBufferFormat = D3DFMT_X8R8G8B8       ;
            D3DPP.BackBufferWidth  = nBreite               ;
            D3DPP.BackBufferHeight = nHoehe                ;
                           
            //Direct X Objekt erzeugen
            if(!(D3D9 = Direct3DCreate9(D3D_SDK_VERSION)))
            return false;
            
            //Bild erstellen
            D3D9 -> CreateDevice ( D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL , hWnd , 
                                   D3DCREATE_HARDWARE_VERTEXPROCESSING , &D3DPP , &D3D9Dev );
            
            //Grafik initalisieren
            Grafik_initalisieren();
            return true;
    };
    ;
    ////////////////////////////////////////////PHASE 2///////////////////////////////////
     
    void Bild_rendern(void)
    {gekürzt};
     
    ////////////////////////////////////////////PHASE 3/////////////////////////////////////
     
    void Programm_beenden(void)
    {gekürzt};
     
    /////////////////////////////////////////////PHASE 4//////////////////////////////////////
     
    void Grafik_initialisieren(void)
    {
        
        VERTEX t_vert[] =
        {
            {   nBreite / 2, nHoehe * 0.03125,
                0.5f, 1.0f, D3DCOLOR_XRGB(255, 200, 0), },
                {   nBreite - (nBreite * 0.0234375), nHoehe - (nHoehe * 0.03125),
                0.5f, 1.0f, D3DCOLOR_XRGB(100, 0, 0), },
                {   nBreite * 0.0234375, nHoehe - (nHoehe * 0.03125),
                0.5f, 1.0f, D3DCOLOR_XRGB(125, 75, 0), },
        };
     
        D3D9Dev->CreateVertexBuffer(    3*sizeof(VERTEX), 0 , COSTUMFVF ,
                                        D3DPOOL_MANAGED , &D3DVertexBuffer9 , NULL);
        
        VOID* pVoid;
     
        D3DVertexBuffer9 -> Lock(0 , 0 , (void**)&pVoid , 0);
           memcpy(pVoid , t_vert , sizeof(t_vert))             ;
        D3DVertexBuffer9 -> Unlock()                        ;
     
        return;
    }
     
    Die 3 größten Katastrophen der Menschheit:
    Hiroshima '45
    Tschernobyl '86
    Windows 98

  2. #2
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    Zitat Zitat von MSAB
    void Grafik_initalisieren (void);

    dein Problem ist einfacher als du denkst xD

    Du hast dich einfach vertippt.

    du hast initalisieren anstelle von initialisieren geschrieben.

    EDIT: übrigens, wenn das eine Engine werden soll, dann kann ich dier nur empfehlen Klassen zu verwenden und nimm Aussagekräftigere Namen für deine Funktionen...

    Unter Bild_erstellen versteh ich nicht die initialisieren von Direct3D
    Geändert von Flegmon (12.08.06 um 20:36 Uhr)
     

  3. #3
    MSAB MSAB ist offline Mitglied Silber
    Registriert seit
    Aug 2006
    Beiträge
    54
    Boa, verdammt. Und ich sitz da Tage davor.
    Naja, danke. Ich hab den Wald vorlauter Bäumen wohl nicht mehr gesehen

    Trotzdem hab ich jetzt das nächste Problem. Compilieren lässt sich das jetzt, aber das Programm stürtzt ab. Da kommt wohl noch viel Arbeit auf mich zu...

    //Edit auf dein EDit: Joa, das soll es mal werden. Wie gesagt, bin noch nicht lange dabei und hab erstma die bezeichnugnen aus den Tutorials genommen
    Geändert von MSAB (12.08.06 um 20:44 Uhr)
     
    Die 3 größten Katastrophen der Menschheit:
    Hiroshima '45
    Tschernobyl '86
    Windows 98

  4. #4
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    Das mit dem abstürzen, das Problem hatte ich am Anfang auch, dass es nie sofort gehen wollte

    Versuche das ganze im Fenster auszuführen, dann kannst du auch mit dem Debugger arbeiten. Das erleichtert die Fehlersuche enorm.

    Es ist nur so, vor allem bei DirectX, dass der Fehler oft nicht da is, wo der Debugger hält -.-

    Zitat Zitat von MSAB
    Wie gesagt, bin noch nicht lange dabei und hab erstma die bezeichnugnen aus den Tutorials genommen
    Wenn die Funktionen in deinem Tutorial so genannt werden, kann ich dier nur empfehlen ein anderes zu suchen.

    Ich würde dir empfehlen ein Buch zu dem Thema zu kaufen. Die sind zwar oft teuer (~30 - 50€) aber da hat man wenigstens ein Rundumwerk, dass alle Grundlagen behandelt.
     

  5. #5
    MSAB MSAB ist offline Mitglied Silber
    Registriert seit
    Aug 2006
    Beiträge
    54
    Thx für den Tipp, dass ich's im Fenster ausführen sollte, der Debugger war anschließend nämlich überflüssig. Das "Programm" funktioniert im Fenstermodus wunderbar, aber im halt Vollbild nicht .
    Im Vollbild wiederum funktioniert es, wenn ich die Funktion Grafik_initialisieren nicht drinnen hab.
    Die Funktion scheint sich also mit dem Vollbild nicht zu vertragen
    Manmanman...

    Das mit dem Buch hatte ich auch schon überlegt, werd ich vll. auch später mal machen.
     
    Die 3 größten Katastrophen der Menschheit:
    Hiroshima '45
    Tschernobyl '86
    Windows 98

Ähnliche Themen

  1. c++ SDL: Linker error LNK2019
    Von markzw im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 02.11.10, 16:59
  2. Mysql++ Linker Fehler
    Von Sapd im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 02.06.10, 09:23
  3. Antworten: 7
    Letzter Beitrag: 18.05.10, 19:44
  4. Linker Fehler... hurra
    Von NotThatJenny im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 03.02.08, 14:35
  5. Wieder mal LNK2019 Fehler, etc.
    Von ProgFreak im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 21.12.05, 11:06