我试图弄清楚arrayfire库的使用,并且按照下面的小代码段编写了一个2D图

c++ - ArrayFire异常(输入类型不同)-LMLPHP

af::info();
af::Window myWindow(800, 800, "2D Plot example: ArrayFire");
myWindow.grid(3, 1);

std::vector <double> xyz = { -1, -1, -1, -1, 0, 0, -1,  -2, -2, -2, -1, -1, 1,  3,  4,  5,  4,  2,  -1, -2 };
array A = seq(0, 19);
af_print(A);
array B(xyz.size(), xyz.data());
af_print(B);

myWindow(0, 0).plot(A, B);
myWindow.show();

但是我在运行时遇到类型不匹配的输入错误。
> ArrayFire Exception (Input types are not the same:205): In function
> af_err __cdecl plotWrapper(void *const ,void *const ,void *const
> ,const af_cell *const ,fg_plot_type,fg_marker_type) In file
> src\api\c\plot.cpp:268 Type mismatch inputs  0# af::allocHost<short>
> in afopencl  1# af::allocHost<short> in afopencl  2#
> af::allocHost<short> in afopencl  3# af_is_real in af  4# af_is_real
> in af  5# main at C:\Users\rad\source\repos\ArrayFire\plot2d.cpp:44
> 6# invoke_main at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79
> 7# __scrt_common_main_seh at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
> 8# __scrt_common_main at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331
> 9# mainCRTStartup at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17
> 10# BaseThreadInitThunk in KERNEL32 11# RtlUserThreadStart in ntdll
>
> In function void __cdecl af::Window::plot(const class af::array
> &,const class af::array &,cons

有人可以帮我还是指导我正确的教程。我从这里http://arrayfire.org/docs/examples.htm关注arrayfire示例。

预先感谢您的帮助。

最佳答案

有几件事可以改进。

  • 数组B具有 double 数据,而数组A具有单精度,即浮点数。 Window::plot()调用期望x和y坐标都属于同一数据类型。因此,错误消息“类型不匹配”。
  • 您现在编写图形代码的方式与arrayfire图形功能的工作方式无关。用户必须有一个事件循环,您可以从graphics examples中快速找到如何编写一个事件循环。

  • 请仔细阅读graphics tutorial,然后再跟随plot2之类的示例,介绍如何编写多 View 渲染程序。

    由于您正在探索arrayfire,因此建议您先执行tutorials,然后再进行code-using-arrayfire或将现有代码移植到arrayfire。

    07-27 13:22