读书人

undefined reference to异常怎么解决

发布时间: 2012-01-28 22:06:13 作者: rapoo

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.)


[解决办法]
在你的mmp文件里加上LIBRARY msgs.lib 可消除上面的错误!
[解决办法]
顶!

楼上的是正解!

你的代码当中只添加了h文件,而没有实现。

类似于你在代码当中只写了函数声明,没有写函数体一样。编译的时候会找不到实现。

读书人网 >Symbian

热点推荐