c++ - 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”文件中声明模板的原因。并通过在头文件中声明和定义模板进行了修复。
解决方案
推荐阅读
- sql - Spark 上的 Hive 不返回聚合或连接查询的结果
- php - Laravel中带有2个外键的搜索栏
- reactjs - 使用 withRouter 时代码覆盖率返回 0%
- java - 如何修复,未使用微调器自定义适配器中的代码检查复选框?
- php - 如何在数组中找到与另一个值相比的值
- html - 如何在div中包装输入元素
- mongodb - MongoDB 枚举一个键的所有数据类型
- php - 我的 Vue.js 代码在加载时不工作
- android - 在 NestedScrollview 中带有 HasFixedSize 的 Recyclerview wrap_content 不显示项目
- php - 使用 Carbon 延迟作业调度时出现意外的“->”