我在调用模板函数时遇到链接错误,但链接器错误似乎没有指向模板函数。它似乎指向函数中的共享指针。我的班级有模板功能:
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;
}
}
大多数类似的问题都说将所有实现放在标题中,我已经完成了。链接错误发生在调用此函数的类中。调用黑板的示例类:
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
类都是visual studio静态lib项目的一部分。使用静态库编译程序时会发生链接错误。
我很难找到解决这个问题的方法,所以任何帮助都会受到赞赏!
答案 0 :(得分:3)
问题似乎是你写的
std::shared_ptr<T> ptr(T);
而不是
std::shared_ptr<T> ptr(value);