我目前正在使用Visual Studio 2008中我的C ++项目中其他人编写的两个C文件(实际上,它是作为多边形交集库在线免费提供的)。
我下载的两个文件是gcp.h和gcp.c.所以我将gcp.h和gcp.c复制到我的项目目录中。链接器给了我这个错误:
未解析的外部符号:void __cdecl gpc_polygon_clip(enum gpc_op,struct gpc_polygon *,struct gpc_polygon *,struct gpc_polygon *)
以下是我使用该库的代码的编写方式:
static int poly_intersection(Convex_Polygon& poly1,Convex_Polygon& poly2,Convex_Polygon& rp)
{
if(!poly1.is_convex() || !poly2.is_convex())
return 1;
// Construct 1st convex polygon
gpc_vertex *gvp1 = new gpc_vertex[poly1.size()];
gpc_vertex v1;
for (unsigned int n = 0; n < poly1.size(); n++)
{
v1.x = poly1.vertex(n).x();
v1.y = poly1.vertex(n).y();
gvp1[n] = v1;
}
gpc_vertex_list gvl1;
gvl1.num_vertices = poly1.size();
gvl1.vertex = gvp1;
gpc_vertex_list *gvlp1 = new gpc_vertex_list[1];
gvlp1[0] = gvl1;
gpc_polygon gp1;
gp1.num_contours = 1;
gp1.hole = 0;
gp1.contour = gvlp1;
// Construct 2st convex polygon
gpc_vertex *gvp2 = new gpc_vertex[poly2.size()];
gpc_vertex v2;
for (unsigned int n = 0; n < poly2.size(); n++)
{
v2.x = poly2.vertex(n).x();
v2.y = poly2.vertex(n).y();
gvp2[n] = v2;
}
gpc_vertex_list gvl2;
gvl2.num_vertices = poly2.size();
gvl2.vertex = gvp2;
gpc_vertex_list *gvlp2 = new gpc_vertex_list[1];
gvlp2[0] = gvl2;
gpc_polygon gp2;
gp2.num_contours = 1;
gp2.hole = 0;
gp2.contour = gvlp2;
// Do convex polygon intersection
gpc_polygon result;
gpc_polygon_clip(GPC_INT, &gp1, &gp2, &result);
为清楚起见,我使用的两个文件的内容是
#gcp.h
#define GPC_EPSILON (DBL_EPSILON)
#define GPC_VERSION "2.32"
/*
===========================================================================
Public Data Types
===========================================================================
*/
typedef enum /* Set operation type */
{
GPC_DIFF, /* Difference */
GPC_INT, /* Intersection */
GPC_XOR, /* Exclusive or */
GPC_UNION /* Union */
} gpc_op;
typedef struct /* Polygon vertex structure */
{
double x; /* Vertex x component */
double y; /* vertex y component */
} gpc_vertex;
typedef struct /* Vertex list structure */
{
int num_vertices; /* Number of vertices in list */
gpc_vertex *vertex; /* Vertex array pointer */
} gpc_vertex_list;
typedef struct /* Polygon set structure */
{
int num_contours; /* Number of contours in polygon */
int *hole; /* Hole / external contour flags */
gpc_vertex_list *contour; /* Contour array pointer */
} gpc_polygon;
typedef struct /* Tristrip set structure */
{
int num_strips; /* Number of tristrips */
gpc_vertex_list *strip; /* Tristrip array pointer */
} gpc_tristrip;
/*
===========================================================================
Public Function Prototypes
===========================================================================
*/
void gpc_read_polygon (FILE *infile_ptr,
int read_hole_flags,
gpc_polygon *polygon);
void gpc_write_polygon (FILE *outfile_ptr,
int write_hole_flags,
gpc_polygon *polygon);
void gpc_add_contour (gpc_polygon *polygon,
gpc_vertex_list *contour,
int hole);
void gpc_polygon_clip (gpc_op set_operation,
gpc_polygon *subject_polygon,
gpc_polygon *clip_polygon,
gpc_polygon *result_polygon);
void gpc_tristrip_clip (gpc_op set_operation,
gpc_polygon *subject_polygon,
gpc_polygon *clip_polygon,
gpc_tristrip *result_tristrip);
void gpc_polygon_to_tristrip (gpc_polygon *polygon,
gpc_tristrip *tristrip);
void gpc_free_polygon (gpc_polygon *polygon);
void gpc_free_tristrip (gpc_tristrip *tristrip);
#endif
在我自己的方法之前,在我的C ++头文件的开头,我把#include“gpc.h”,我认为会照顾它。但它没有用。
答案 0 :(得分:2)
如果在.cpp文件中使用C函数,请包含如下所示的C头文件:
extern "C" {
#include "gpc.h"
}
因为C和C ++中的函数符号不同。