【问题标题】:CreatePolygonRgn and const POINT *CreatePolygonRgn 和 const POINT *
【发布时间】:2016-10-26 07:37:38
【问题描述】:

我只给你关于我的问题的行。我不知道为什么这不能编译:

POINT ptVertex[5];

ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;

CreatePolygonRgn( &ptVertex, 5, ALTERNATE )

我在 DevC++ TDM GCC 64bits 上编译,错误是:

无法将参数 '1' 的 'POINT ()[5] {aka tagPOINT ()[5]}' 转换为 'const POINT* {aka const tagPOINT*}' 到 'HRGN__* CreatePolygonRgn(const POINT*, int, int)'

如果有人能发现我的错误。谢谢。

【问题讨论】:

  • 提供minimal reproducible example。并选择两种不同语言 C 或 C++ 中的一种!
  • 函数CreatePolygonRgn的签名是什么?即它的声明是什么?
  • 这是签名:WINGDIAPI HRGN WINAPI CreatePolygonRgn( CONST POINT * pptl, int cPoint, int iMode )
  • CreatePolygonRgn( ptVertex, 5, ALTERNATE )。这样,您将传递第一个元素的地址而不是数组的地址(相同的值但不同的类型)。

标签: c++ c winapi gdi


【解决方案1】:

CreatePolygonRgn() 需要一个指向数组中第一个 POINT 的指针,以及数组中的项目数。但是你传递给它一个指向数组本身的指针,而不是它的第一个元素。您可以:

  1. 在应用& 运算符之前对数组的第一个元素进行索引:

    CreatePolygonRgn( &ptVertex[0], 5, ALTERNATE )
    
  2. 完全删除& 运算符,因为静态数组可以降级为指向其第一个元素的指针:

    CreatePolygonRgn( ptVertex, 5, ALTERNATE )
    

【讨论】:

    【解决方案2】:

    您正在传递一个五人数组的地址,而函数需要一个元素的地址和长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2021-07-24
      • 2010-09-29
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2018-08-23
      相关资源
      最近更新 更多