首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用模板方法?

如何调用模板方法?
EN

Stack Overflow用户
提问于 2010-11-24 19:27:58
回答 5查看 5.5K关注 0票数 6

有很多在线文档解释如何编写模板方法,但关于如何调用它们、如何在代码中使用它们的例子不多。

我有一个这样的模板方法:

VectorConvertor.h

代码语言:javascript
复制
template <class T>
static void AppendToVector(std::vector<T> & VectorToBeAppended,
                           std::vector<T> & VectorToAppend);

VectorConvertor.cpp

代码语言:javascript
复制
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));
    }
}

代码中的使用尝试:

代码语言:javascript
复制
std::vector<uint8_t> InputData, OutputData;
// ...
VectorConvertor::AppendToVector(OutputData, InputData);

我编译这段代码时没有任何错误。但是,当我尝试使用这种方法时,我会得到以下错误:

错误LNK1120: 1个未解决的外部

error LNK2019:未解析的外部符号"public:::AppendToVector( class std::__cdecl > &,class std::__cdecl > &)“”LNK2019引用的函数"public: staticclass std::__cdecl>__cdecl Utf8 8::WStringToUtf8 8(类std::basic_string,类std::allocator >)“(?WStringToUtf8@Utf8@@SA?AV?$vector@EV?$allocator@E@std@@@std@@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@3@@Z)

当我在代码中不使用这个方法时,我不会收到任何错误消息。我叫它的时候做错什么了?我是不是遗漏了什么?

我正在使用Visual 2010速成版。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-24 19:32:11

在C++中,使用模板时不能分离.cpp文件中的定义。您需要将该定义放在头文件中。请参见:

http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12

票数 7
EN

Stack Overflow用户

发布于 2010-11-24 19:31:48

您需要将函数的主体放在头文件中。见这个常见问题

票数 5
EN

Stack Overflow用户

发布于 2010-11-24 19:34:36

模板链接可能会变得棘手。但最简单的解决办法通常是:

将所有模板定义放在头文件中.

在这种情况下,您应该将VectorConverter.cpp的内容移到VectorConverter.h (或者可能是VectorConverter.h底部的#include "VectorConverter.cpp" )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4270720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档