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.