我在以下情况下遇到链接错误,无法找到缺陷的位置:
qutil.h
template <class T>
bool isPrime( T number );
qutil.cpp
#include "qutil.h"
template <class T>
bool isPrime( T number )
{
// 0 and 1 are not prime
// even numbers are not prime
if ( number < 2 || number % 2 == 0 )
return false;
// now we restrict our search to odd numbers
// greater than 2
for ( T i = 3; i < number; i += 2 ) {
if ( number % i == 0 )
return false;
}
return true;
}
main_qutil.cpp
#include "qutil.h"
...
quint64 num = 10;
qDebug() << num << "isPrime:" << isPrime( num );
代码编译时没有错误:
cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\Dev\QT484\include\QtCore" -I"c:\Dev\QT484\include\QtGui" -I"c:\Dev\QT484\include" -I"." -I"c:\Dev\QT484\include\ActiveQt" -I"debug" -I"c:\Dev\QT484\mkspecs\win32-msvc2008" -Fodebug\ @C:\DOKUME~1\Alain\LOKALE~1\Temp\nm124D.tmp
qutil.cpp
main_qutil.cpp
但链接器抱怨:
Generating Code...
link /LIBPATH:"c:\Dev\QT484\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /MANIFEST /MANIFESTFILE:"debug\qutil.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='' processorArchitecture=''" /OUT:debug\qutil.exe @C:\DOKUME~1\Alain\LOKALE~1\Temp\nm124E.tmp
main_qutil.obj : error LNK2019: unresolved external symbol "bool __cdecl isPrime(unsigned __int64)" (??$isPrime@_K@@YA_N_K@Z) referenced in function _main
有什么想法吗?
答案 0 :(得分:1)
我不认为您可以在标头中放置模板函数声明,并在cpp文件中实现。您必须将整个模板函数放在头文件(qutil.h)中。
类似主题:Storing C++ template function definitions in a .CPP file