Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 生成boost::ptr_向量容器类push_back函数_C++_Boost_Containers_Ptr Vector - Fatal编程技术网

C++ 生成boost::ptr_向量容器类push_back函数

C++ 生成boost::ptr_向量容器类push_back函数,c++,boost,containers,ptr-vector,C++,Boost,Containers,Ptr Vector,我只是想了解一下容器类和模板,但在解决如何正确实现它们时遇到了困难。。我所有的问题都很相似,所以一旦我解决了这个问题,我想我应该没事了 下面是我试图实现的push_-back成员函数的代码: //data is of type boost::ptr_vector<T> template <class T> void P_VContainer<T>::push_back(T* item) { data.push_back(item); } 这是我从编

我只是想了解一下容器类和模板,但在解决如何正确实现它们时遇到了困难。。我所有的问题都很相似,所以一旦我解决了这个问题,我想我应该没事了

下面是我试图实现的push_-back成员函数的代码:

//data is of type boost::ptr_vector<T>

template <class T>
void P_VContainer<T>::push_back(T* item)
{
    data.push_back(item);
}
这是我从编译器得到的错误:

main.cpp:(.text+0x89f): undefined reference to `P_VContainer<Customer>::push_back(Customer*)'
main.cpp:(.text+0x89f):对'P_VContainer::push_back(Customer*)的未定义引用
我主要是这样实施的:

P_VContainer<Customer> myvector;

Customer *a = new Customer("C004", "Testy McTestington");

myvector.push_back(a);
P_VContainer myvector;
客户*a=新客户(“C004”、“Testy McTestington”);
myvector.push_back(a);

关于我做错了什么有什么想法吗?

不要将模板划分为声明和实现。在头文件中实现它们。

这很有效,谢谢。。是否有一个特殊的原因使您不应该将模板划分为声明和实现,但其他类可以这样做?@guskenny83:模板必须(通常)在使用它们的每个源文件中定义,因为实例化它们需要定义。这(通常)意味着定义必须在标题中,以使其在任何需要的地方都可用。有关更多详细信息,请参阅副本。
P_VContainer<Customer> myvector;

Customer *a = new Customer("C004", "Testy McTestington");

myvector.push_back(a);