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文件,而没有实现。
类似于你在代码当中只写了函数声明,没有写函数体一样。编译的时候会找不到实现。