WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  error LNK2001: unresolved external

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   error LNK2001: unresolved external
server_mouse опубликован 17-07-2001 16:37 MSK   Click Here to See the Profile for server_mouse   Click Here to Email server_mouse  
Народ, как побороть сабж?
MFC

Есть два класса: класс CMainFrame и CClient.
Хочу что бы они видели друг друга. Делаю следующее:
<MainFrm.h>
class CClient;
CClient* Client;
....

<MainFrm.cpp>
#include "Client.h";
....

<Client.h>
class CMainFrame;
CMainFrame* MainFrm;
....

<Client.cpp>
#include "CMainFrm.h"
....

Ну и дальше ворочаю через указатели. В дебаг версии всё работает как молодое, а в релизе на все попытки в CClient сделать MainFrm->AnyFn(); получаю сабж. Причём сабж выдаёт линкёр!

the_moon опубликован 18-07-2001 03:32 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
Привет, а ты проверь настройуи проекта, наверняка ты либо забыл MFC в релизе использовать( есть такое :) ) или что то не линкуешь, что требуется,

Ты скажи что он там не находит то, а то на первый взгляд с классами все в порядке,

server_mouse опубликован 18-07-2001 20:41 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Привет!

Есть у меня void CMainFrame::LockSt(){...}
В CClient есть CMainFrame* MainFrm;
Делаю
CMainFrame::CMainFrame()
{
Client=new CClient(this); //конструктор конечно соотв. определён
....
}

Далее:
void CClient::OnClose()
{
MainFrm->LockSt();
/*
Вот тут собственно и выползает сабж... Понял я это только потому, что в сообщении было: Client.obj Unresolvet external LockSt()...
*/
....
}


Что такое мелкософт и как с этим бороться ;-)

the_moon опубликован 19-07-2001 19:59 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
Попробуй поменять в <MainFrm.h> строку

class CClient;

на

#include "Client.h"

что бы не было рекурсии в объявлении, достаточно только для одного класса зделать заглушку. Иначе для "Клиента" Сервер может статься пустым классом, так мне кажется покрайней мере, хотя черт его знает тогда, почему только в релизе такие проблемы, наверника, что то ты напортачил и майкрософт тут не причем.


the_moon опубликован 19-07-2001 20:01 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
Кстати если не поможет пришли Makefile может там что будет видно, вместе поразбираемся
server_mouse опубликован 19-07-2001 23:34 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
>наверника, что то ты напортачил и майкрософт тут не причем.

2the_moon: Естественно я. Шучу просто... :-)

server_mouse опубликован 20-07-2001 10:37 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
# Microsoft Developer Studio Generated NMAKE File, Based on cl.dsp
!IF "$(CFG)" == ""
CFG=cl - Win32 Debug
!MESSAGE No configuration specified. Defaulting to cl - Win32 Debug.
!ENDIF

!IF "$(CFG)" != "cl - Win32 Release" && "$(CFG)" != "cl - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "cl.mak" CFG="cl - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "cl - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "cl - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF

!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF

!IF "$(CFG)" == "cl - Win32 Release"

OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros

ALL : "$(OUTDIR)\cl.exe"


CLEAN :
-@erase "$(INTDIR)\cl.obj"
-@erase "$(INTDIR)\cl.pch"
-@erase "$(INTDIR)\cl.res"
-@erase "$(INTDIR)\Client.obj"
-@erase "$(INTDIR)\MainFrm.obj"
-@erase "$(INTDIR)\StdAfx.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\cl.exe"

"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

CPP=cl.exe
CPP_PROJ=/nologo /G5 /Zp1 /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\cl.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c

.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x419 /fo"$(INTDIR)\cl.res" /d "NDEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\cl.bsc"
BSC32_SBRS= \

LINK32=link.exe
LINK32_FLAGS=/nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\cl.pdb" /machine:I386 /out:"$(OUTDIR)\cl.exe"
LINK32_OBJS= \
"$(INTDIR)\cl.obj" \
"$(INTDIR)\Client.obj" \
"$(INTDIR)\MainFrm.obj" \
"$(INTDIR)\StdAfx.obj" \
"$(INTDIR)\cl.res"

"$(OUTDIR)\cl.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<

!ELSEIF "$(CFG)" == "cl - Win32 Debug"

OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros

ALL : "$(OUTDIR)\cl.exe"


CLEAN :
-@erase "$(INTDIR)\cl.obj"
-@erase "$(INTDIR)\cl.pch"
-@erase "$(INTDIR)\cl.res"
-@erase "$(INTDIR)\Client.obj"
-@erase "$(INTDIR)\MainFrm.obj"
-@erase "$(INTDIR)\StdAfx.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\cl.exe"
-@erase "$(OUTDIR)\cl.ilk"
-@erase "$(OUTDIR)\cl.pdb"

"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

CPP=cl.exe
CPP_PROJ=/nologo /G5 /Zp1 /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\cl.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c

.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<

MTL=midl.exe
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x419 /fo"$(INTDIR)\cl.res" /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\cl.bsc"
BSC32_SBRS= \

LINK32=link.exe
LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\cl.pdb" /debug /machine:I386 /out:"$(OUTDIR)\cl.exe" /pdbtype:sept
LINK32_OBJS= \
"$(INTDIR)\cl.obj" \
"$(INTDIR)\Client.obj" \
"$(INTDIR)\MainFrm.obj" \
"$(INTDIR)\StdAfx.obj" \
"$(INTDIR)\cl.res"

"$(OUTDIR)\cl.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<

!ENDIF


!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("cl.dep")
!INCLUDE "cl.dep"
!ELSE
!MESSAGE Warning: cannot find "cl.dep"
!ENDIF
!ENDIF


!IF "$(CFG)" == "cl - Win32 Release"

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.