ошибка времени выполнения в vc ++ - PullRequest
0 голосов
/ 06 октября 2011

мой проект содержит несколько классов (1 из них - 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

Я искал в Интернете, и в основном причина такого сбоя не в том, что stdafx.h находится в 1-й строке каждого файла ... но я уже включил его. я также получаю некоторые предупреждения для последней функции destruct_point () ->

\maths\maths\createpoint.cpp(51): warning C4154: deletion of an array expression; conversion to pointer supplied

1 Ответ

3 голосов
/ 06 октября 2011

LNK2001 - ошибка компоновщика, а не ошибка времени выполнения.

Point3D *point[]; представляется декларацией, но не экземпляром. То есть эта строка сообщает компилятору, что эта переменная будет существовать где-то позже. Потому что массивы должны иметь размер для создания экземпляров. (Я даже не знал, [] без размера было разрешено в этой области)

Измените это на Point3D *point[size];, и он фактически создаст массив. Кроме того, size должен быть const int.

[Изменить]
destruct_point() пытается удалить весь массив точек. Поскольку массив статически размещен, это не разрешено. Поскольку у вас уже есть функция удаления отдельных точек, я не могу представить, почему эта функция существует. Поскольку массив не был объявлен с new[], вы НЕ должны использовать delete[] для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...