将2d std::数组传递给函数cpp
Passing 2d std::array to function cpp
我试图在c++中编写一个函数,该函数将接受2个输入std::数组,并通过矩阵乘法返回产品数组。然而,该函数不能采用不同尺寸的数组(例如4x4工作,3x4不)
下面是代码:
#include <iostream>
#include <array>
template <std::size_t SIZE>
void dot(std::array<std::array<double, SIZE>, SIZE>& array1,
std::array<std::array<double, SIZE>, SIZE>& array2)
{
int x1 = array1.size();
int y1 = array1[0].size();
int x2 = array2.size();
int y2 = array2[0].size();
}
int main()
{
using std::array;
array<array<double, 4>, 4> syn0 = {{ {1,2,4},
{2,3,4},
{6,8,6},
{1,2,4} }};
dot(syn0, syn0);
return 0;
}
使用这个问题中的模板示例,它将接受像代码中的4x4这样的数组。
将矩阵更改为不相等的数字会产生以下错误:
newer.cpp: In function ‘int main()’:
newer.cpp:23:21: error: too many initializers for ‘std::__array_traits<std::array<double, 4ul>, 3ul>::_Type {aka std::array<double, 4ul> [3]}’
{1,2,4} }};
^
newer.cpp:24:17: error: no matching function for call to ‘dot(std::array<std::array<double, 4ul>, 3ul>&, std::array<std::array<double, 4ul>, 3ul>&)’
dot(syn0, syn0);
^
newer.cpp:24:17: note: candidate is:
newer.cpp:6:6: note: template<long unsigned int SIZE> void dot(std::array<std::array<double, SIZE>, SIZE>&, std::array<std::array<double, SIZE>, SIZE>&)
void dot(std::array<std::array<double, SIZE>, SIZE>& array1,
^
newer.cpp:6:6: note: template argument deduction/substitution failed:
newer.cpp:24:17: note: deduced conflicting values for non-type parameter ‘SIZE’ (‘4ul’ and ‘3ul’)
dot(syn0, syn0);
^
newer.cpp:24:17: note: ‘std::array<std::array<double, 4ul>, 3ul>’ is not derived from ‘std::array<std::array<double, SIZE>, SIZE>
我认为这样做的原因是模板只分配了一个变量,所以如果我将2赋值给同一个变量,它就会抛出错误。我测试了是否可以为两个不同的变量堆叠模板,但这是不可能的。
我怎么能允许函数采取任何大小的二维数组,而不导致错误?
看来你们真的很接近了。
你只需要把SIZE2
作为一个参数添加到你的模板中:
template <std::size_t SIZE,std::size_t SIZE2>
void dot(std::array<std::array<double, SIZE>, SIZE2>& array1,
std::array<std::array<double, SIZE>, SIZE2>& array2)
,它可以正常编译顺便说一句,你的syn0
尺寸错了
int main()
{
using std::array;
array<array<double, 3>, 4> syn0 = {{ {1,2,4},
{2,3,4},
{6,8,6},
{1,2,4} }};
dot(syn0, syn0);
return 0;
}
相关文章:
- 内置函数可查看CPP中的成员变量
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 我需要知道编译器如何在cpp中使用析构函数
- 使用cpp中的结构和函数的多个学生条目
- 从 c 或 cpp 系列子函数返回到主函数
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如果 x.h 仅由函数声明组成,为什么有必要在 x 中包含 x.h.cpp
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 从不同的 cpp 调用回调函数会导致bad_function_call
- cpp 使用 abs() 函数和 size_t
- 是否可以使用 libclang python 解析 cpp 文件中没有标头的函数原型
- 如何在另一个 CPP 文件中使用一个 cpp 文件中的函数?
- 处理简单 cpp 类构造函数中的错误
- 我如何在函数 cpp 中返回字符串
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- 文件中定义的 Constexpr 构造函数.cpp会导致链接错误
- 从函数 CPP 返回 int 或 string.c_str() 时的两个不同的行为
- 构造函数 CPP 中基元数据类型的初始化
- 链表函数 cpp 中的指针作用域
- 将2d std::数组传递给函数cpp