Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;头文件中的模板_C++_Templates - Fatal编程技术网

C++ C++;头文件中的模板

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

我得到一个链接器错误(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 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]: