C3083 bei statischem Linken
-
Hallo!
Wenn ich meine Anwendung statisch linke, erhalte ich immer den Kompilerfehler 3083. Code sieht in etwa wie folgt aus:
// Static Library Header namespace App { namespace MyLib { class CMyView : public CView { // ... }; } }
// Static Exe Code-Datei namespace App { CApplication::InitInstance() { CCreateContext CreateContext; DummyDocument DummyDoc; CreateContext.m_pCurrentFrame = pFrame; CreateContext.m_pNewViewClass = RUNTIME_CLASS(MyLib::CMyView); } }
In der Zeile 10 von beim 2. Codeteil, tritt der Fehler auf. Aber nur beim statischen Linken. Ich kann mir wirklich keinen Reim daraus machen.
Fehlerdetails Error 1 error C3083: 'classMyLib': the symbol to the left of a '::' must be a type Error 2 error C2277: 'App::MyLib::CMyView::{ctor}' : cannot take address of this member function
-
Da hier die Namen direkt verwendet werden, kann man keine Scope Operatoren benutzen. Schau Dir die Makros an und Du wirst sehen, dass hier nur ein Name erlaubt ist. Dieser name wird verwendet um die entsprechenden Variablen zu erzeugen.
Evtl. klappt es wenn Du mit using arbeitest.
-
Martin Richter schrieb:
Da hier die Namen direkt verwendet werden, kann man keine Scope Operatoren benutzen. Schau Dir die Makros an und Du wirst sehen, dass hier nur ein Name erlaubt ist. Dieser name wird verwendet um die entsprechenden Variablen zu erzeugen.
Evtl. klappt es wenn Du mit using arbeitest.
Das ist dann also ein Makro spezifisches Problem, richtig? Das ist wirklich ärgerlich, zumal Namensräume nichts Neues sind...wohl aber die Makros sehr alt.
Mit einem using werde ich das mal probieren. Danke für den Tipp.
Aber warum entsteht das Problem nur beim statischen Linken der Exe und der Dll bzw. Lib?
-
Kann ich mir nicht vorstellen. Das Problem müsste grundsätzlich bestehen.
-
Martin Richter schrieb:
Kann ich mir nicht vorstellen. Das Problem müsste grundsätzlich bestehen.
Ist bei dieser Anwendung in der Tat so. Bei Zeiten könnte ich mal probieren, ob das Problem reproduzierbar ist.
Die statische Lib (Dll) ist übgrigens eine eine MFC Extension Dll, wo ich
_AFXEXT
undDllMain
entfernt habe.