对_GLOBAL__sub_I__ZN11CarC2Ev'的未定义引用:

时间:2018-07-26 17:38:21

标签: c++11 templates

我正在尝试实现一种注册类的方法(代码中的“ Car”),然后使用Factory模式,在运行时实例化一个对象(基类为“ Transport”,“ Car”从其继承) )。

这是我在注册表中的代码。h

#define REGISTER_CLASS(NAME, TYPE, BASE) static Register<BASE> registrer((const char*)NAME, [](void) -> BASE* { return new TYPE();});

template <class TClass>
class Register {
public:
    Register<TClass>(const char* className, std::function<TClass* (void)> classFactoryFunction);
};

这是Registy.cpp

template <class TClass>
Register<TClass>::Register(const char* className, std::function<TClass* (void)> classFactoryFunction){
    // Register the class factory function
    Factory::Instance()->RegisterFactoryFunction(className, classFactoryFunction);
}

在Car.cpp中,我使用以下代码注册Car:

REGISTER_CLASS((const char*)"Car", Car, Transport);

如果我不使用模板,那么我所有的代码都可以工作... 使用模板,出现以下错误:

sketch / src / Car.cpp.o:在函数_GLOBAL__sub_I__ZN10CarC2Ev': sketch/src/Car.cpp:42: undefined reference to中的Register :: Register(char const *,std :: function)' collect2:错误:ld返回1退出状态

我的代码有什么问题?

0 个答案:

没有答案