我在编写C ++模板时遇到问题,让我们检查一下代码:
abc.h
class ABC
{
public:
template <class T>
T getSomething(const std::string& name, ABC* owner = 0);
ABC* getSomething(const std::string& name);
};
abc.cpp
#include "abc.h"
template <class T>
T ABC::getSomething(const std::string& name, ABC* owner)
{
return dynamic_cast<T>(owner ? owner->getSomething(name) : getSomething(name));
}
ABC* ABC::getSomething(const std::string& name)
{
return NULL;
}
我的主要功能如下:
int main()
{
ABC abc;
ABC* test = abc.getSomething<ABC*>("hello", NULL);
}
当我把我的主要放在这个abc.cpp并编译它时,没有问题一切正常
但是当我使用这个abc.cpp(后来我把它编译成abc.o)然后把我的main函数放在不同的文件中(比如说def.cpp)时就会出现问题。
我得到了非常奇怪的错误,错误说:
/tmp/ccn1H4Bg.o: In function `main':
def.cpp:(.text+0x4a): undefined reference to `ABC* ABC::getSomething<ABC*>(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ABC*)'
collect2: ld returned 1 exit status
你能帮我解决我在这里做错的事吗?
谢谢大家!
答案 0 :(得分:2)
//abc.h
class ABC
{
public:
template <class T>
T getSomething(const std::string& name, ABC* owner = 0);
ABC* getSomething(const std::string& name);
};
template <class T>
T ABC::getSomething(const std::string& name, ABC* owner)
{
return dynamic_cast<T>(owner ? owner->getSomething(name) : getSomething(name));
}
//abc.cpp
ABC* ABC::getSomething(const std::string& name)
{
return NULL;
}
//def.cpp
int main()
{
ABC abc;
ABC* test = abc.getSomething<ABC*>("hello", NULL);
}