C++ CreatePolygonRgn和常量点*

C++ CreatePolygonRgn和常量点*,c++,c,winapi,gdi,C++,C,Winapi,Gdi,关于我的问题,我只给你一句话。我不知道这为什么不能编译: 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

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

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 64位上编译,错误为:

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


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

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

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

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

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

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

    CreatePolygonRgn( ptVertex, 5, ALTERNATE )
    
  • CreatePolygonRgn()
    需要一个指向数组中第一个
    点的指针,以及数组中的项数。但是您正在向它传递一个指向数组本身的指针,而不是它的第一个元素。您可以:

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

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

    CreatePolygonRgn( ptVertex, 5, ALTERNATE )
    

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