//Forward declaration
class MyType;
class Factory{
template<class T>
static T* CreateObject(T& newOb){
return &newOb;
}
//Other non template functions
}
//In main (error causing line)
MyType tmptype;
MyType* newMyType = Factory::CreateObject<MyType>(tmptype);
此代码导致此错误: 对MyType * Factory :: CreateObject(MyType&amp;)'
的未定义引用我也收到这个警告: 警告:已激活自动导入,但未在命令行中指定--enable-auto-import
此外,如果我使用int类型,它仍然不起作用,它排除了未正确包含类型的可能性。
答案 0 :(得分:1)
该函数接受引用,因此您需要将一个变量传递给它,编译器可以在该变量中获取地址。
class Factory{
public:
template<class T>
static T* CreateObject(T& newOb){
return &newOb;
}
//Other non template functions
};
class MyType {};
int main() {
MyType a;
MyType* newMyType = Factory::CreateObject<MyType>(a);
}
答案 1 :(得分:0)
您尚未定义MyType。如果要将Factory类传递给要创建的对象,则需要定义要传递的类型。没有传递工厂类不可能创建的对象类型!所以你的MyType应该是用于原语的typedef或定义你自己的数据类型的struct / class。
理想地,
class MyType{
//Some data structure or type that you want to use.
};
和
class Factory{
public:
template<class T>
static T* CreateObject(T& newOb){
return &newOb;
}
//Other non template functions
}
允许您的工厂类创建您自己类型的对象。
答案 2 :(得分:0)
答案很简单。你的函数调用语法是错误的。您只需拨打Factory::CreateObject(tmptype);
您不需要像模板化类那样实例化模板化函数。