vc ++中的运行时错误

时间:2011-10-06 19:23:57

标签: c++ visual-c++

我的项目包含几个类(其中一个是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

1 个答案:

答案 0 :(得分:3)

LNK2001是链接器错误,而不是运行时错误。

Point3D *point[];似乎是一个声明,但不是实例化。也就是说,这一行告诉编译器这个变量将在以后的某个地方存在。因为数组必须具有要实例化的大小。 (我甚至不知道[]在该范围内没有允许大小)

将其更改为Point3D *point[size];,它实际上会创建数组。此外,size必须是const int

[编辑]
destruct_point()尝试删除整个点阵列。由于数组是静态分配的,因此不允许这样做。既然你已经有了删除单个点的功能,我无法想象为什么这个功能存在。由于数组未使用new[]声明,因此不应在其上使用delete[]