prob beim linken



  • moin, ich hab ka ob ich hir im richtigen forum bin, aber ich hab ein prob beim linken. ich veruche gerade mein erstes opengl prog zu schreiben:

    [cpp]main.cpp
    #define STRICT
    #include <windows.h>
    #include "OpenGLWnd.cpp"

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
    {
    [...]
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    [...]
    }
    [/cpp]

    OpenGLWnd.cpp
    #define STRICT
    #include <windows.h>
    #include <GL/gl.h>			/* OpenGL header file */
    #include <GL/glu.h>			/* OpenGL utilities header file */
    
    class OpenGLWindow
    {
    public:
    void draw();
    HWND CreateOpenGLWindow(char*, int, int, int, int,BYTE, DWORD, WNDPROC);
    };
    
    void OpenGLWindow::draw()
    {
    [...]
    }
    
    HWND OpenGLWindow::CreateOpenGLWindow(char* title, int x, int y, int width, int height,BYTE type, DWORD flags, WNDPROC WndProc)
    {
       [...]
    }
    

    wenn ich das compilieren will kommt folgende felhermeldung:

    --------------------Configuration: opengl - Win32 Debug--------------------
    Compiling...
    main.cpp
    Linking...
    OpenGLWnd.obj : error LNK2005: "public: void thiscall OpenGLWindow::draw(void)" (?draw@OpenGLWindow@@QAEXXZ) already defined in main.obj
    OpenGLWnd.obj : error LNK2005: "public: struct HWND
    * __thiscall OpenGLWindow::CreateOpenGLWindow(char ,int,int,int,int,unsigned char,unsigned long,long (__stdcall)(struct HWND__ *,unsigned int,unsigned int,long))" (?CreateOpenGLWindow@OpenGLWin
    dow@@QAEPAUHWND__@@PADHHHHEKP6GJPAU2@IIJ@Z@Z) already defined in main.obj
    Debug/opengl.exe : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.

    opengl.exe - 3 error(s), 0 warning(s)

    was kann ich tun?



  • mach dat weg

    #include "OpenGLWnd.cpp"
    


  • und wie binde ich die OpenGLWnd.cpp dann ein?



  • brodo schrieb:

    und wie binde ich die OpenGLWnd.cpp dann ein?

    die is automatisch eingebunden sobald du sie zum projekt hinzufügst

    [cpp]OpenGLWnd.obj : error LNK2005: "public: void __thiscall OpenGLWindow::draw(void)" (?draw@OpenGLWindow@@QAEXXZ) already defined in main.obj [/cpp]

    heisst auf deutsch:

    OpenGLWindow::draw befindet sich sowohl in OpenGLWnd.cpp als auch in main.cpp

    #include heisst dass der inhalt der datei genommen wird un an der stelle an der du das #include machst in die andere datei eingefügt wird



  • hmm, wenn ich das ganze so kompiliere findet er aber die klasse in openglwnd.cpp nicht mehr. muss ich in die main.cpp vielliecht noch irgendwelche prototypen schreiben?



  • [cpp]main.cpp
    #define STRICT
    #include <windows.h>
    #include "OpenGLWnd.h"

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
    {
    [...]
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    [...]
    }
    [/cpp]

    OpenGLWnd.cpp
    #define STRICT
    #include <windows.h>
    #include <GL/gl.h>			/* OpenGL header file */
    #include <GL/glu.h>			/* OpenGL utilities header file */
    #include "OpenGLWnd.h"
    
    void OpenGLWindow::draw()
    {
    [...]
    }
    
    HWND OpenGLWindow::CreateOpenGLWindow(char* title, int x, int y, int width, int height,BYTE type, DWORD flags, WNDPROC WndProc)
    {
       [...]
    }
    

    [cpp]OpenGLWnd.h
    #ifndef OPENGLWND_H
    #define OPENGLWND_H

    #include <windows.h>
    class OpenGLWindow
    {
    public:
    void draw();
    HWND CreateOpenGLWindow(char*, int, int, int, int,BYTE, DWORD, WNDPROC);
    };

    #endif
    [/cpp]

    so sollte es aussehn, dann kennen beide cpps die klasse
    viel spass



  • wunderbar, das funktioniert! vielen dank.


Anmelden zum Antworten