我的项目包含几个类(其中一个是Point3D)&一个cpp(CreatePoint.cpp)&头文件(CreatePoint.h)。
我的stdafx.h文件是
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include "CreatePoint.h"
#include "Point3D.h"
#include "Vector3D.h"
#include "Sys.h"
我的CreatePoint.h文件是
#include "stdafx.h"
#pragma once
#include "Point3D.h"
//*******************************************************************
void initialise();
//*******************************************************************
Point3D *get_point(int);
//*******************************************************************
int get_index(Point3D *);
//*******************************************************************
Point3D *create_point();
//*******************************************************************
void del_point(Point3D *);
//*******************************************************************
void destruct_point();
我的CreatePoint.cpp文件是
#include "stdafx.h"
#include "CreatePoint.h"
int counter;
int size = 50;
Point3D *point[];
//*******************************************************************
void initialise()//run this func each time point[] is created
{
counter = 0;
for(int i = 0; i<size; i++)
{
point[i] = '\0';
}
}
//*******************************************************************
Point3D *get_point(int index)
{
return point[index];
}
//*******************************************************************
int get_index(Point3D *p)
{
for(int i = 0; i<size; i++)
{
if(point[i] == p)
return i;
}
}
//*******************************************************************
Point3D *create_point()
{
point[counter] = new Point3D;
counter++;
return point[counter];
}
//*******************************************************************
void del_point(Point3D *p)
{
int d = get_index(p);
delete point[d];
}
//*******************************************************************
void destruct_point()
{
delete [] point;
}
我遇到了运行时错误:
CreatePoint.obj : error LNK2001: unresolved external symbol "class Point3D * * point" (?point@@3PAPAVPoint3D@@A)
1>C:\Documents and Settings\my documents\visual studio 2010\Projects\Maths\Debug\Maths.exe : fatal error LNK1120: 1 unresolved externals
我搜索了网络&amp;这种失败的原因主要是在每个文件的第一行都没有包括stdafx.h ......但我已经把它包含了。 我也在为最后一个函数destruct_point() - &gt;
发出一些警告\maths\maths\createpoint.cpp(51): warning C4154: deletion of an array expression; conversion to pointer supplied
答案 0 :(得分:3)
LNK2001
是链接器错误,而不是运行时错误。
Point3D *point[];
似乎是一个声明,但不是实例化。也就是说,这一行告诉编译器这个变量将在以后的某个地方存在。因为数组必须具有要实例化的大小。 (我甚至不知道[]在该范围内没有允许大小)
将其更改为Point3D *point[size];
,它实际上会创建数组。此外,size
必须是const int
。
[编辑]
destruct_point()
尝试删除整个点阵列。由于数组是静态分配的,因此不允许这样做。既然你已经有了删除单个点的功能,我无法想象为什么这个功能存在。由于数组未使用new[]
声明,因此不应在其上使用delete[]
。