undefined reference to错误如何解决
想写一个在后台监视短信的exe程序,
MyStart.cpp
#include <e32base.h>
#include <e32std.h>
#include <e32cons.h> // Console
#include "MyObserver.h"
_LIT(KTextConsoleTitle, "Console");
_LIT(KTextFailed, " failed, leave code = %d");
_LIT(KTextPressAnyKey, " [press any key]\n");
LOCAL_D CConsoleBase* console; // write all messages to this
LOCAL_C void DoStartL()
{
// Create active scheduler (to run active objects)
CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
CleanupStack::PushL(scheduler);
CActiveScheduler::Install(scheduler);
CMyObserver* observer = CMyObserver::NewL(*console);
observer->Load();
//CActiveScheduler::Start();
// Delete active scheduler
CleanupStack::PopAndDestroy(scheduler);
}
GLDEF_C TInt Start()
{
// Create cleanup stack
__UHEAP_MARK;
CTrapCleanup* cleanup = CTrapCleanup::New();
// Create output console
TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen)));
if (createError)
return createError;
// Run application code inside TRAP harness, wait keypress when terminated
TRAPD(mainError, DoStartL());
if (mainError)
console->Printf(KTextFailed, mainError);
console->Printf(KTextPressAnyKey);
console->Getch();
delete console;
delete cleanup;
__UHEAP_MARKEND;
return KErrNone;
}
// Exported Functions
#ifdef __WINS__
EXPORT_C TInt WinsMain(TAny* /*aParam*/)
{
return Start();
}
#else
GLDEF_C TInt E32Main()
{
return Start();
}
#endif
#ifdef __WINS__
TInt E32Dll(TDllReason /*aReason*/)
{
return KErrNone;
}
#endif
// End of file
MyObserver.h
#ifndef MYOBSERVER_H
#define MYOBSERVER_H
// INCLUDES
// System Includes
#include <e32base.h> // CBase, link against euser.lib
#include <s32std.h>
#include <msvapi.h>
// FORWARD DECLARATIONS
//class MyClass;
class CConsoleBase;
// CLASS DECLARATION
class CMyObserver : public CBase, public MMsvSessionObserver
{
public: // Constructors and destructor
static CMyObserver* NewL(CConsoleBase& aConsole);
static CMyObserver* NewLC(CConsoleBase& aConsole);
virtual ~CMyObserver();
public: // Functions from base classes
void HandleSessionEventL( TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3 );
void Load();
private: // Constructors
CMyObserver(CConsoleBase& aConsole);
void ConstructL();
private: // Data
CMsvSession* iMsvSession;
CMsvEntry* iMsvEntry;
CConsoleBase& iConsole;
TMsvId iNewMessageId;
};
#endif // MYOBSERVER_H
MyObserver.cpp
#include "MyObserver.h"
// System includes
#include <e32cons.h>
#include <s32file.h>
#include <e32base.h> // For CBase, link against euser.lib
#include <msvids.h>
#include <msvapi.h>
//#include <ResourceFile.rsg>
// User includes
//#include "MyHeaderFile.h"
#ifdef __WINS__
const TMsvId KObservedFolderId = KMsvDraftEntryId;
#else
const TMsvId KObservedFolderId = KMsvGlobalInBoxIndexEntryId;
#endif
// ================= MEMBER FUNCTIONS =======================
CMyObserver::CMyObserver(CConsoleBase& aConsole) :
iConsole(aConsole)
{
}
CMyObserver::~CMyObserver()
{
delete iMsvSession;
delete iMsvEntry;
}
CMyObserver* CMyObserver::NewLC(CConsoleBase& aConsole)
{
CMyObserver* self = new (ELeave) CMyObserver(aConsole);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CMyObserver* CMyObserver::NewL(CConsoleBase& aConsole)
{
CMyObserver* self = CMyObserver::NewLC(aConsole);
CleanupStack::Pop(self);
return self;
}
void CMyObserver::ConstructL()
{
iMsvSession = CMsvSession::OpenAsyncL(*this);
}
void CMyObserver::Load()
{
}
void CMyObserver::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* /*aArg3*/)
{
}
armi urel 的时候出现如下错误,还望各位帮帮忙啊
..\..\..\..\EPOC32\BUILD\SYMBIAN\8.1A\S60_2ND_FP3\SERIES60EX\DATASF\MYSTART\GROUP\MYSTART\ARMI\UREL\MYSTART.in(../../../../EPOC32/BUILD/SYMBIAN/8.1A/S60_2ND_FP3/SERIES60EX/DATASF/MYSTART/GROUP/MYSTART/ARMI/UREL/MYOBSERVER.o)(.text+0x11c):Myobserver.cpp: undefined reference to `CMsvSession::OpenAsyncL(MMsvSessionObserver &)'
make: *** [..\..\..\..\EPOC32\RELEASE\ARMI\UREL\MYSTART.EXE] Error 1
ERROR: RCMake failed: (Make): make command exited with result 2. (Reason: The system cannot find the file specified.)