Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C I';我在某个时候丢失了我的对象类型 //构造一个长度最大点数组。 //使用给定点填充数组,并初始化正在处理的点数。 //为用户打印给定的点。 结构点点[最大点]; int numPoints=读取点(点); printf(“点集:\n”); 显示点(点、numPoints); //构造一个数组,用最大可能点(numPoints)表示外壳。 结构点外壳[numPoints]; 结构点pointOnHull=最左点(点,numPoints); 结构点端点; int e=0; //表演贾维斯进行曲。 做{ 外壳[e]=点外壳; 端点=点[0]; 对于(int i=1;i0)) 终点=点[i]; ++e; }while(端点!=hull[0]);//我们已经回到开始。 //打印映射的外壳点。 printf(“凸面外壳:\n”); 显示点(外壳、NUMPOINT);_C - Fatal编程技术网

C I';我在某个时候丢失了我的对象类型 //构造一个长度最大点数组。 //使用给定点填充数组,并初始化正在处理的点数。 //为用户打印给定的点。 结构点点[最大点]; int numPoints=读取点(点); printf(“点集:\n”); 显示点(点、numPoints); //构造一个数组,用最大可能点(numPoints)表示外壳。 结构点外壳[numPoints]; 结构点pointOnHull=最左点(点,numPoints); 结构点端点; int e=0; //表演贾维斯进行曲。 做{ 外壳[e]=点外壳; 端点=点[0]; 对于(int i=1;i0)) 终点=点[i]; ++e; }while(端点!=hull[0]);//我们已经回到开始。 //打印映射的外壳点。 printf(“凸面外壳:\n”); 显示点(外壳、NUMPOINT);

C I';我在某个时候丢失了我的对象类型 //构造一个长度最大点数组。 //使用给定点填充数组,并初始化正在处理的点数。 //为用户打印给定的点。 结构点点[最大点]; int numPoints=读取点(点); printf(“点集:\n”); 显示点(点、numPoints); //构造一个数组,用最大可能点(numPoints)表示外壳。 结构点外壳[numPoints]; 结构点pointOnHull=最左点(点,numPoints); 结构点端点; int e=0; //表演贾维斯进行曲。 做{ 外壳[e]=点外壳; 端点=点[0]; 对于(int i=1;i0)) 终点=点[i]; ++e; }while(端点!=hull[0]);//我们已经回到开始。 //打印映射的外壳点。 printf(“凸面外壳:\n”); 显示点(外壳、NUMPOINT);,c,C,这是我为Jarvis March(礼品包装)程序编写的代码,用于解决凸包问题。GCC在我的结构点比较(endPoint==pointOnHull和endPoint!=hull[0])上都出现了错误。我是C语言的新手,这是我第一个使用C语言的项目之一。谁能帮我看看我把事情搞砸了吗 具体错误: jarvis.c:31:19:错误:二进制==(具有'struct Point'和'struct Point'的操作数无效) jarvis.c:34:21:错误:二进制操作数无效!=(具有“结构点”和“结构点

这是我为Jarvis March(礼品包装)程序编写的代码,用于解决凸包问题。GCC在我的结构点比较
(endPoint==pointOnHull
endPoint!=hull[0])
上都出现了错误。我是C语言的新手,这是我第一个使用C语言的项目之一。谁能帮我看看我把事情搞砸了吗

具体错误:

jarvis.c:31:19:错误:二进制==(具有'struct Point'和'struct Point'的操作数无效)

jarvis.c:34:21:错误:二进制操作数无效!=(具有“结构点”和“结构点”)


C
中的结构没有比较运算符。您必须定义自己的比较函数,并使用它代替
=
。试着这样做:

// Construct an array of length MAX_POINTS.
// Populate the array with given points and initialize the number points being handled.
// Print the given points for the user.
struct Point points[MAX_POINTS];
int numPoints = readPoints(points);
printf("Set of points: \n");
displayPoints(points, numPoints);

// Construct an array to represent the hull with max possible points (numPoints).
struct Point hull[numPoints];
struct Point pointOnHull = leftmostPoint(points, numPoints);
struct Point endPoint;
int e = 0;

// Perform Jarvis March.
do {
    hull[e] = pointOnHull;
    endPoint = points[0];
    for ( int i = 1; i < numPoints; i++ )
        if ( (endPoint == pointOnHull) || (ccw(hull[e], endPoint, points[i]) > 0) )
            endPoint = points[i];
    ++e;
} while ( endPoint != hull[0] );        // we've looped back to the beginning.

// Print the mapped hull points.
printf("Convex hull: \n");
displayPoints(hull, numPoints);
或者,如果您的结构更复杂(但情况可能并非如此):


后者不会复制整个
结构以将其传递给
相等点
,而是传递指针(引用类型)<代码>常量非常重要,因为它不会让您在只想比较点时意外修改点。

结构点的类型定义是什么?您可能只需要按部分进行比较,而不是依赖它来理解如何比较结构。C甚至提供了结构比较吗?正如迈克尔所说,你必须自己做比较。哦,妈的,这是一个伟大的观点。我在头文件中有一个equals方法,用于其他东西,但完全忘记了。我要试一试。@Michael+1没有多少“可能”。他需要某种类型的
ComparePoint()s
函数。注意,根据底层结构的复杂性,按地址而不是按值传递可能是有益的。在这种情况下,值是可以接受的。在这个结构中加上一堆原油,很快就会变得昂贵。此外,这里的参数可以是
常量
,但如果通过地址传递,则肯定应该是这样。@VaibhavDesai在这种情况下这没什么大不了的,但应该通过地址来确定。
bool equalPoints(const struct Point p1, const struct Point p2) {
    return (p1.x == p2.x) && (p1.y == p2.y);
}

if (equalPoints(endPoint, pointOnHull)) { /* then code here */ }
bool equalPoints(const struct Point *p1, const struct Point *p2) {
    /* 
     * In case your structure is more complex here goes
     * more complex comparison code
     */
    return (p1->x == p2->x) && (p1->y == p2->y);
}

if (equalPoints(&endPoint, &pointOnHull) { /* then code here */ }