对于我的一个程序,我做了一个小函数来清除我拥有的各种 std::vectors 指针。
template <class S>
void clearPtrVector(std::vector<S*> &a,int size)
{
for(size_t i = 0; i < size; i++)
delete a[i];
a.clear();
}
我一定是在这里做错了什么,因为在析构函数中调用这个函数时是这样的:
clearPtrVector(neurons,neurons.size());
我两次得到以下 undefined reference :
undefined reference to `void clearPtrVector<Neuron>(std::vector<Neuron*,std::allocator<Neuron*> >&, int)'
我不得不承认我不熟悉 std::allocator 是什么,所以我猜不出这里可能有什么问题。非常感谢任何帮助。提前致谢!
-左撇子
最佳答案
热修复
改为写以下内容:
template <class Vector>
void clearPtrVector(Vector &a)
{
for(size_t i = 0; i < a.size(); i++)
delete a[i];
a.clear();
}
确保在每次使用模板之前将模板定义在编译器可以看到的地方。如果不创建声明,应该是安全的,否则会出现编译错误。如果您出于任何原因确实创建了声明,请加倍小心,根据需要在所有地方包含定义。
重新设计
也就是说,我认为正确的解决方案是重新考虑您的设计并使用一个能够正确处理销毁的容器,这样您就不必手动进行,这很乏味,而且几乎不可能正确地进行如果您需要异常安全。使用 std::shared_ptr
而不是原始指针,或者使用 std::auto_ptr
和一个能够容纳它们的容器(std::vector
无法存储 auto_ptr
值)。一种可能的解决方案是使用 Boost Pointer Container
关于c++ - 指针模板清除函数的 vector 无法编译并显示 "undefined reference"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/914460/