hkB*_*sai 6 c++ methods templates function
有很多在线文档解释了如何编写模板方法,但没有太多关于如何调用它们的示例,如何在代码中使用它们.
我有这样的模板方法:
VectorConvertor.h
template <class T>
static void AppendToVector(std::vector<T> & VectorToBeAppended,
std::vector<T> & VectorToAppend);
Run Code Online (Sandbox Code Playgroud)
VectorConvertor.cpp
template <class T>
void VectorConvertor::AppendToVector(std::vector<T> & VectorToBeAppended,
std::vector<T> & VectorToAppend)
{
for (std::vector::size_type i=0; i<VectorToAppend.size(); i++)
{
VectorToBeAppended.push_back(VectorToAppend.at(i));
}
}
Run Code Online (Sandbox Code Playgroud)代码中的使用尝试:
std::vector<uint8_t> InputData, OutputData;
// ...
VectorConvertor::AppendToVector(OutputData, InputData);
Run Code Online (Sandbox Code Playgroud)我编译此代码没有任何错误.但是,当我尝试使用此方法时,我收到以下错误:
错误LNK1120:1个未解析的外部
和
错误LNK2019:未解析的外部符号"public:static void __cdecl VectorConvertor :: AppendToVector(class std :: vector>&,class std :: vector>&)"(?? $ AppendToVector @ E @ VectorConvertor @@ SAXAEAV?$ vector @ EV?$ allocator @ E @ std @@@ std @@ 0 @ Z)在函数"public:staticclass std :: vector> __cdecl Utf8 :: WStringToUtf8(class std :: basic_string,class std :: allocator>)"中引用(?WStringToUtf8 @ UTF8 @@ SA?AV?$ @矢量EV?$分配器| E @性病性病@@@ @@ V'$ @的basic_string _WU?$ @ char_traits @ _W性病@@ V'$ @分配器@ _W 2 @@ 3 @@ Z)
当我在我的代码中不使用此方法时,我没有收到任何错误消息.在调用它时我做错了什么?我错过了什么吗?
我正在使用Visual Studio 2010 Express Edition.
在C++中,使用模板时无法在.cpp文件中分隔定义.您需要将定义放在头文件中.看到:
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12