c – 对类模板的成员函数的未定义引用

前端之家收集整理的这篇文章主要介绍了c – 对类模板的成员函数的未定义引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在模板类方法中使用迭代器.
这是我的代码:(testclass.h)
template<typename T,typename container>
class TestClassX
{
public:
    void gen(typename container::iterator first );
};

文件testclass.cpp:

template<typename T,typename container>
void TestClassX<T,container>::gen(typename container::iterator first)
{

}

当我尝试运行它时:

TestClassX<unsigned,std::vector<unsigned> > testx;
testx.gen(it);

我收到一个错误

Error:undefined reference to `TestClassX<unsigned int,std::vector<unsigned int,std::allocator<unsigned int> > >::gen(__gnu_cxx::__normal_iterator<unsigned int*,std::allocator<unsigned int> > >)'

我用的是mingw32 4.4

我希望有一个类可以写入不同的容器,如std :: vector,std :: list,QVector或QList,它们都具有STL样式的迭代器.

解决方法

必须在头文件中定义模板类方法.当您使用模板类时,编译器实际上为给定的模板参数编译该类的版本.因此,要求在包括文件时每种方法的主体都可用.

删除文件并将主体包含在testclass.h中:

template<typename T,typename container>
class TestClassX
{
public:
    void gen(typename container::iterator first ) {

    }
};

猜你在找的C&C++相关文章