C ++未定义的模板成员函数引用

时间:2011-12-10 01:45:33

标签: c++ templates reference undefined

//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类型,它仍然不起作用,它排除了未正确包含类型的可能性。

3 个答案:

答案 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);

即可

您不需要像模板化类那样实例化模板化函数。