在Visual Studio 2017中使用C函数的未解决的外部错误

时间:2018-05-01 03:38:29

标签: c++ visual-c++ visual-studio-2017 unresolved-external

我正在Visual Studio 2017中编写一个C ++程序,试图利用这个C程序:https://www.cs.cmu.edu/~quake/triangle.html

我在程序开头有外部“C”{#include triangle.h},但我仍然收到错误:

LNK2019 unresolved external symbol _triangulate referenced in function "void __cdecl createTriangulation(void)" (?createTriangulation@@YAXXZ)   GLTests C:\Users\Connor McDermott\source\repos\GLTests\GLTests\main.obj 1   

这是我从三角形调用的函数:

void createTriangulation() {
triangulateio in, out;

/* Define input points. */

in.numberofpoints = pts.size();
in.numberofpointattributes = 0;
in.pointlist = (REAL *)malloc(in.numberofpoints * 2 * sizeof(REAL));
for (int i = 0; i < pts.size(); i++) {
    in.pointlist[2 * i] = pts[i].x;
    in.pointlist[2 * i + 1] = pts[i].y;
}
in.pointmarkerlist = (int *)NULL;

in.numberofsegments = pts.size();
in.segmentlist = (int *)malloc(in.numberofsegments * 2 * sizeof(int));
in.segmentlist[0] = pts.size() - 1;
in.segmentlist[1] = 0;
for (int i = 1; i < pts.size(); i++) {
    in.segmentlist[2 * i] = i - 1;
    in.segmentlist[2 * i + 1] = i;
}

in.numberofholes = 0;
in.numberofregions = 0;

out.pointlist = (REAL *)NULL;            /* Not needed if -N switch used. */
/* Not needed if -N switch used or number of point attributes is zero: */
out.pointattributelist = (REAL *)NULL;
out.pointmarkerlist = (int *)NULL; /* Not needed if -N or -B switch used. */
out.trianglelist = (int *)NULL;          /* Not needed if -E switch used. */
/* Not needed if -E switch used or number of triangle attributes is zero: */
out.triangleattributelist = (REAL *)NULL;
out.neighborlist = (int *)NULL;         /* Needed only if -n switch used. */
/* Needed only if segments are output (-p or -c) and -P not used: */
out.segmentlist = (int *)NULL;
/* Needed only if segments are output (-p or -c) and -P and -B not used: */
out.segmentmarkerlist = (int *)NULL;
out.edgelist = (int *)NULL;             /* Needed only if -e switch used. */
out.edgemarkerlist = (int *)NULL;   /* Needed if -e used and -B not used. */

char switches[6] = { 'p', 'z', 'B', 'P', 'N' };
triangulate(switches, &in, &out, (struct triangulateio *) NULL);

for (int i = 0; i < out.numberofsegments; i++) {
    edge e;
    e.p0 = pts[out.segmentlist[2 * i]];
    e.p1 = pts[out.segmentlist[2 * i + 1]];
}

}

我已经尝试过查看有关此错误的问题,但是有很多可能的原因我无法找到适用于这种情况的原因。当包含c程序的标题时,最常见的问题似乎是不使用extern“C”,但我已经这样做了。

那么我做错了什么?

感谢任何可以提供帮助的人。

0 个答案:

没有答案