当前位置:编程学习 > C#/ASP.NET >>

C++ 使用c的函数,无法解析的错误

下面是我的c++工程里的一个别人写的c文件

//gcp.h
#ifndef __gpc_h
#define __gpc_h

#include <stdio.h>


/*
===========================================================================
                               Constants
===========================================================================
*/

/* Increase GPC_EPSILON to encourage merging of near coincident edges    */

#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++工程里边使用它提供的函数,这是我写的代码
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);


//do sth with result

//release memory
gpc_free_polygon(&gp1);
gpc_free_polygon(&gp2);
gpc_free_polygon(&result);


return 0;


我把那个gcp.h 和gcp.cpp都放到了我的工程文件夹里,并且在使用它之前,加了include "gcp.h". Windows7 上vs2008编译之后报错说“error LNK2019: 无法解析的外部符号 "void __cdecl gpc_polygon_clip”
请问一下可能是什么问题?先谢谢了 C++ 无法解析错误 --------------------编程问答-------------------- 问题解决了,由于c++里使用包含c文件需要使用 
extern "C" {
#include "gpc.h"
}
改过以后,编译通过 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 liudaisuda 的回复:
问题解决了,由于c++里使用包含c文件需要使用 
extern "C" {
#include "gpc.h"
}
改过以后,编译通过

恭喜恭喜!
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,