首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用标头中定义的模板函数时C++链接器错误

调用标头中定义的模板函数时C++链接器错误
EN

Stack Overflow用户
提问于 2017-06-29 18:31:10
回答 1查看 317关注 0票数 0

在调用模板函数时,我得到了一个链接错误,但是链接器错误似乎没有指向模板函数。它似乎指向函数中的共享指针。我的类具有模板函数:

代码语言:javascript
复制
class Blackboard {
    public:
    template<class T>
    bool setValue(std::string key, T* value) {
        std::shared_ptr<T> ptr(T);
        boost::any v = ptr;
        auto it = map.insert(std::pair<std::string, boost::any>(key, v));
        return it.second;
    }
}

大多数类似的问题都说把所有的实现放在标题中,我已经这样做了。链接错误发生在调用此函数的类中。调用黑板的示例类:

代码语言:javascript
复制
class Example {
    void foo(Blackboard* blackboard) {
        int* i = new int;
        *i = 0;
        blackboard->setValue<int>("some key", i);
    }
}

错误:

Error LNK2019 unresolved external symbol "class std::shared_ptr<int> __cdecl ptr(int)" (?ptr@@YA?AV?$shared_ptr@H@std@@H@Z) referenced in function "public: bool __cdecl BehaviorTree::Blackboard::setValue<int>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int *)" (??$setValue@H@Blackboard@BehaviorTree@@QEAA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAH@Z)

Blackboard类和Example类都是项目的一部分。使用静态库编译程序时会发生链接错误。

我很难找到解决这个问题的办法,所以任何帮助都会很感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-29 18:41:07

问题似乎是你写的

代码语言:javascript
复制
std::shared_ptr<T> ptr(T);

而不是

代码语言:javascript
复制
std::shared_ptr<T> ptr(value);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44832543

复制
相关文章

相似问题

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