problem mit einbinden einer funktion
-
HALL0.
ich habe folgendes problemchen. ich will in die normale, vom MFC erstellte SDI-anwendung, ein opengl-fenster setzen. (siehe: http://hopf.chem.brandeis.edu/yanglingfa/OpenGL/abc.html)
dazu habe ich, wie in diesem beispiel, eine neue klasse (GLApp) für das opengl-fenster geschaffen. diese enthält methoden wie 'IniOpenGL', 'DrawScene', etc.
mein problem ist nun, dass ich, wenn ich unter 'OnCreate()' mein fenster initialisieren möchte, dann findet mein programm den befehl 'IniOpenGL','DrawScene' etc. nicht. und dies, obwohl ich die header datei mit den entsprechenden funktionen (GLApp::IniOpenGL, GLApp::DrawScene, etc.) am anfang der header datei, in der die definition für 'OnCreate' u.a. steht, eingebunden habe.
wenn ich folgende zeilen einfüge:
void DrawScene(void); int IniOpenGL(CView*);gibt es folgende fehlermeldung:
error LNK2019: unresolved external symbol "int __cdecl IniOpenGL(class CView

error LNK2019: unresolved external symbol "void __cdecl DrawScene(void)hat jemand von euch eine gute idee, woran das liegt?
DANKE!
STICK.
-
HI.
ich habe jetzt das problem teilweise gelöst. es lag daran, dass die neue opengl_klasse nicht befreundet war mit der 'hauptfensterklasse' und daher auch nicht dessen methoden kennen konnte. nun gibt es aber folgende fehlermeldungen, nachdem nun beide klassen befreundet sind:
error C2594: 'return' : ambiguous conversions from 'COpenGl_TestView *' to 'CObject *' error C2594: 'static_cast' : ambiguous conversions from 'int (__thiscall COpenGl_TestView::* )(LPCREATESTRUCT)' to 'int (__thiscall CWnd::* )(LPCREATESTRUCT)' error C2594: 'static_cast' : ambiguous conversions from 'void (__thiscall COpenGl_TestView::* )(UINT,int,int)' to 'void (__thiscall CWnd::* )(UINT,int,int)'was ist zu tun?
DANKE.
STICK.
-
Natürlich mußt du dem Linker auch mitteilen, wo er diese Funktionen findet - dazu trägst du die *nachsieht* 'glut32.lib' in den Projektoptionen als Bibliothek ein.
-
stick_thai schrieb:
ich habe jetzt das problem teilweise gelöst. es lag daran, dass die neue opengl_klasse nicht befreundet war mit der 'hauptfensterklasse' und daher auch nicht dessen methoden kennen konnte. nun gibt es aber folgende fehlermeldungen, nachdem nun beide klassen befreundet sind:
Ziemlich sicher war DAS nicht der Fehler - für den Linker sind 'friend'-Beziehungen unwichtig (die wurden schon vorher vom Compiler aufgelöst). Und deine Fehlermeldungen "LNK2019" sind Linkerfehler.
Und um deine neuen Fehler einordnen zu können, müsstest du mal etwas mehr Code zeigen.
-
danke für die antwort, leider handelt es sich hier nicht um vorgefertigte funktionen, sondern funktionen, die ich selber zuvor geschrieben habe. darum klappt das einfügen der lib. leider nicht.
STICK.
-
HALL0.
hier kommt jetzt der code-ausschnitt, bei dem die 3 fehler auftreten:
IMPLEMENT_DYNCREATE(COpenGl_TestView, CView) BEGIN_MESSAGE_MAP(COpenGl_TestView, CView) // Standard printing commands ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview) ON_WM_CREATE() ON_WM_SIZE() END_MESSAGE_MAP()zuvor habe ich die 2 klassen CView und GLApp miteinander befreundet, und zwar so:
class COpenGl_TestView : public CView, GLApp {...};