C++ C++;头文件中的模板
我得到一个链接器错误(2001,未解析的外部符号),代码如下。这只发生在模板上,我可以完全用void、int等做同样的事情C++ C++;头文件中的模板,c++,templates,C++,Templates,我得到一个链接器错误(2001,未解析的外部符号),代码如下。这只发生在模板上,我可以完全用void、int等做同样的事情 //a.h template<typename T> T foo( DWORD ); //a.cpp #include "a.h" template<typename T> T foo( DWORD bar ) { return T(); } //main.cpp #include "a.h" void somethin
//a.h
template<typename T> T foo( DWORD );
//a.cpp
#include "a.h"
template<typename T> T foo( DWORD bar )
{
return T();
}
//main.cpp
#include "a.h"
void something()
{
int hello = foo<int>( 1 );
}
//a.h
模板T foo(DWORD);
//a、 cpp
#包括“a.h”
模板T foo(DWORD bar)
{
返回T();
}
//main.cpp
#包括“a.h”
使某物无效
{
int hello=foo(1);
}
当我像这样将foo声明放在头文件中时,它确实起作用
//a.h
template<typename T> T foo( DWORD bar )
{
return T();
}
//a.h
模板T foo(DWORD bar)
{
返回T();
}
> p> C++编译器需要查看模板定义,以便执行隐式实例化。这意味着,C++编译器只能在调用函数调用时自动生成模板函数调用的目标代码。
但是,您可以改为依赖显式实例化。这意味着您要求编译器为指定的模板的特定实例生成C++代码。然后,当在>Meal.CPP >中使用模板时,在链接时间内的C++编译器将能够找到这个实现(通过外部链接)。
//a.cpp
#include "a.h"
template<typename T> T foo( DWORD bar )
{
return T();
}
template int foo<int> (DWORD); // explicit instantiation
//a.cpp
#包括“a.h”
模板T foo(DWORD bar)
{
返回T();
}
模板int foo(DWORD);//显式实例化
您应该了解[为什么只能在头文件中实现模板][1][1]: