首页 > 解决方案 > C++ 函数模板 - 将向量复制到 C 样式的数组

问题描述

我的目标是,我想要一个函数模板来将向量转换为 type* 数组以便于使用。而不是为“相同”功能创建多个功能。

使用以下代码(注意函数在命名空间 Khan 内):

// Func.h
template <typename T>
T* vector_to_array(std::vector<T> vec);

// Func.cpp
template <typename T>
T* vector_to_array(std::vector<T> vec)
{
    T* arr = new T[vec.size()];
    std::copy(vec.begin(), vec.end(), arr);

    return arr;
 }

// Inside main function
std::vector<int> test_vec = { 0, 2, 3 };
int* test_arr = Khan::vector_to_array(test_vec);

我收到以下错误:

undefined reference to Khan::vector_to_pointer(std::vector<int, std::allocator<int> >)

我测试了不同的方法,并为 int 制作了一个特定的函数,如上面的示例中不包括模板。

因此,我的问题是,这些错误的合理原因是什么,可能的解决方法是什么?

并澄清我的目标。我的目标是让函数不依赖于类型,返回 C 样式数组中的向量副本。

*编辑:用完整的代码重写,部分错误丢失。

已解决:由于这个问题是重复的,我在另一篇文章中找到了答案。总结一下导致此问题的原因,前面所述的错误是在“.cpp”文件中声明模板的原因。并通过在头文件中声明和定义模板进行了修复。

标签: c++arraystemplatesstdvector

解决方案


推荐阅读