I can't figure out what the following error depends on. It is a link LNK2001
error and it is a static NewL function that is the trouble. The link error
is as following
--------------------Configuration: TERMINALAPP - Win32 Uni Debug--------------------
Compiling...
TerminalAppSaveForm.cpp
Doing first-stage link by name
link.exe @C:\DOCUME~1\Jocke\LOKALA~1\Temp\nma04064.
Creating library
\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WINS\UDEB\TERMINALAPP.lib and object
\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WINS\UDEB\TERMINALAPP.exp
TERMINALAPPCONTAINER.obj : error LNK2001: unresolved external symbol
"public: static class CTerminalAppSaveForm * __cdecl
CTerminalAppSaveForm::NewL(void)" (?NewL@CTerminalAppSaveForm@@SAPAV1@XZ)
\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WIN
S\UDEB\TERMINALAPP.APP : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link.exe' : return code '0x460'
Stop.
if exist
"\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WINS\UDEB\TERMINALAPP.exp" del "\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WINS\UDEB\TERMINALAPP.exp"
Stopped the build by removing the export object,
if present, because the pre-link stage failed
Linking...
LINK : fatal error LNK1104: cannot open file
"\Symbian\6.1\Series60\EPOC32\BUILD\PROJEKT\TERMINALAPP\GROUP\TERMINALAPP\WI
NS\UDEB\TERMINALAPP.exp"
Error executing link.exe.
TERMINALAPP.APP - 4 error(s), 0 warning(s)
The error puzzling me is
TERMINALAPPCONTAINER.obj : error LNK2001: unresolved external symbol
"public: static class CTerminalAppSaveForm * __cdecl
CTerminalAppSaveForm::NewL(void)" (?NewL@CTerminalAppSaveForm@@SAPAV1@XZ)
and it makes no sense to me since NewL function is both declared and
defined. I have copied the code from another example that works just fine.
Here's the code:
////////This code I beleive is relevant ///////////
--- TerminalAppContainer.cpp ---
#include "Terminalappcontainer.h"
#include "TerminalAppSaveForm.h"
#include "TerminalApp.hrh"
#include <aknutils.h> // for AKN_LAF_COLOR
#include <aknform.h>
#include <eiklabel.h> // for example label control
#include <eikedwin.h>
#include <eikenv.h>
#include <terminalapp.rsg>
void CTerminalAppContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
iLabel = new (ELeave) CEikLabel;
iLabel->SetContainerWindowL( *this );
iLabel->SetTextL( _L("Example View"😉 );
iMobilNrEdwin = new (ELeave) CEikEdwin;
iMobilNrEdwin->SetContainerWindowL( *this );
iMobilNrEdwin->SetTextL( &(_L("Add tel no here"😉) );
SetRect(aRect);
ActivateL();
}
CTerminalAppContainer::~CTerminalAppContainer()
{
delete iLabel;
delete iMobilNrEdwin;
}
void CTerminalAppContainer::SizeChanged()
{
iLabel->SetExtent( TPoint(10,10), iLabel->MinimumSize() );
}
TInt CTerminalAppContainer::CountComponentControls() const
{
return 2;
}
CCoeControl* CTerminalAppContainer::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iLabel;
case 1:
return iMobilNrEdwin;
default:
return NULL;
}
}
void CTerminalAppContainer:😃raw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.SetPenStyle(CGraphicsContext::ENullPen);
gc.SetBrushColor(KRgbGray);
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.DrawRect(aRect);
}
void CTerminalAppContainer::HandleControlEventL(CCoeControl*
/*aControl*/,TCoeEvent /*aEventType*/)
{}
void CTerminalAppContainer:😃isplayFormL( TInt aResourceId )
{
CTerminalAppSaveForm* form = CTerminalAppSaveForm::NewL();
form->ExecuteLD( aResourceId );
}
--- TerminalAppSaveForm.h ---
#ifndef TERMINALAPPSAVETESTFORM_H
#define TERMINALAPPSAVETESTFORM_H
#include <aknform.h>
#include "TerminalApp.hrh"
class CTerminalAppSaveForm : public CAknForm
{
public:
static CTerminalAppSaveForm* NewL();
virtual ~CTerminalAppSaveForm();
TInt ExecuteLD( TInt aResourceId );
void PrepareLC( TInt aResourceId );
private:
CTerminalAppSaveForm();
void ConstructL();
void PostLayoutDynInitL();
TBool QuerySaveChangesL();
TBool SaveFormDataL();
void DoNotSaveFormDataL();
TBuf<EAknExFormEdwinMaxLength> iEdwinData1;
TInt iCurrentId;
};
#endif // AKNEXFORMSAVETESTFORM_H
--- TerminalAppSaveForm.cpp ---
#include <eikcapc.h>
#include <aknexform.rsg>
#include "TerminalAppSaveForm.h"
CTerminalAppSaveForm* CTerminalAppSaveForm::NewL()
{
CTerminalAppSaveForm* self = new (ELeave) CTerminalAppSaveForm();
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop();
return self;
}
CTerminalAppSaveForm::~CTerminalAppSaveForm() {}
CTerminalAppSaveForm::CTerminalAppSaveForm() {}
void CTerminalAppSaveForm::ConstructL() { CAknForm::ConstructL(); }
TInt CTerminalAppSaveForm::ExecuteLD( TInt aResourceId )
{
iCurrentId = aResourceId;
return CAknForm::ExecuteLD( aResourceId );
}
void CTerminalAppSaveForm::PrepareLC( TInt aResourceId )
{
iCurrentId = aResourceId;
CAknForm::PrepareLC( aResourceId );
}
TBool CTerminalAppSaveForm::SaveFormDataL()
{
return ETrue;
}
void CTerminalAppSaveForm:😃oNotSaveFormDataL()
{
}
void CTerminalAppSaveForm::PostLayoutDynInitL()
{
CAknForm::PostLayoutDynInitL();
SaveFormDataL();
}
TBool CTerminalAppSaveForm::QuerySaveChangesL()
{
TBool isAnsYes(CAknForm::QuerySaveChangesL());
if (isAnsYes)
{
SaveFormDataL();
}
else
{
// Case that answer "No" to query.
DoNotSaveFormDataL();
}
return isAnsYes;
}
Hope someone can help me with this frustrating error.
/Joachim