Re: Help for me:LNK2019
- From: "Bruno van Dooren" <bruno_nos_pam_van_dooren@xxxxxxxxxxx>
- Date: Fri, 3 Mar 2006 11:31:06 +0100
"Ñ©ÔÆÓ¥" <xueyunying@xxxxxxxxxxx> wrote in message
news:Ob4$rCnPGHA.2236@xxxxxxxxxxxxxxxxxxxxxxx
Hi,I have met a trouble,has anyone can help me?
error detail:
Linking...
ListTest.obj : error LNK2019: unresolved external symbol "public:
__thiscall com::LinearList<int>::LinearList<int>(int)"
(??0?$LinearList@H@com@@QAE@H@Z) referenced in function _main
D:\Project\CPPTest\Debug\CPPTest.exe : fatal error LNK1120: 1 unresolved
externals
<ListTest.cpp>
-------------------------------------------------------------------------------------------
#include <stdafx.h>
#include "List.h"
#include <iostream>
using namespace std;
using namespace com;
void main()
{
try
{
LinearList<int> L(10);
//cout << "Length = " << L.Length() << endl;
//cout << "IsEmpty = " << L.IsEmpty() <<endl;
////L.Insert( 0 , 2 ).Insert( 1 ,6 ) ;
////cout << "List is " << L << endl;
//cout << "IsEmpty = " << L.IsEmpty() << endl;
//int z = 0;
////L.Find( 1 , z ) ;
//cout << "First element is " << z << endl;
//cout << "Length = " << L.Length() << endl;
////L.Delete( 1 , z ) ;
//cout << "Deleted element is " << z << endl;
////cout << "List is " << L << endl;
}
catch (...)
{
cerr << "An exception has occurred" << endl;
}
}
<List.h>
-------------------------------------------------------------------------------------------
template<class T> class LinearList {
public:
//¹¹Ô캯Êý
LinearList(int MaxListSize);
//Îö¹¹º¯Êý
~LinearList() {delete [] element;}
<snip>
} ;
};
<List.cpp>
-----------------------------------------------------------------------------
#include <stdafx.h>
#include "List.h"
#include <iostream>
using namespace std;
namespace com {
// ʹn e wÒý·¢N o M e mÒì³£¶ø²»ÊÇx a l l o cÒì³£
void my_new_handler()
{
throw NoMem();
}
//set new handler for new operation
new_handler Old_Handler_=set_new_handler(my_new_handler);
template<class T> LinearList<T>::LinearList(int MaxListSize)
{
// »ùÓÚ¹«Ê½µÄÏßÐÔ±íµÄ¹¹Ô캯Êý
MaxSize = MaxListSize;
element = new T[MaxSize];
length = 0;
}
I am pretty sure it will work if you do not split declaration and
implementation into 2 separate files.
i.e. you have to put the full implementation in the header file.
if you want to split the declaration and implementation of a template class
you would have to use the export keyword.
quote from stroustroub, programming C++ language 3d edition, page 351:
"To be accessible from other compilation units, a template definition must
be explicitly declared export ...
otherwise, the definition must be in scope whenever the template is used"
sadly, the export keyword is not supported in VC, so you have to put the
implementation in your header file.
--
Kind regards,
Bruno.
bruno_nos_pam_van_dooren@xxxxxxxxxxx
Remove only "_nos_pam"
.
- References:
- Help for me:LNK2019
- From: Ñ©ÔÆÓ¥
- Help for me:LNK2019
- Prev by Date: Re: Bizzare error following change of _export to __declspec(dllexport)
- Next by Date: Re: Help for me:LNK2019
- Previous by thread: Help for me:LNK2019
- Next by thread: Re: Help for me:LNK2019
- Index(es):
Relevant Pages
|