Передача значения в функцию - PullRequest
0 голосов
/ 25 ноября 2011

Больше не нужно искать, я нашел ошибку, но не могу ответить сам до восьми часов, потому что у меня мало очков.

Я хочу передать указатель (он объявлен внутри класса Window и оценен внутри его конструктора), ссылающийся на функцию "fillBorderVertexes", которая объявлена ​​внутри функции класса "Draw", но компилятор выдает мне эту ошибку:

1>window.obj : error LNK2019: unresolved external symbol "void __cdecl fillBorderVertexes(class TransparentMaze *,class std::vector<class std::vector<float,class std::allocator<float> >,class std::allocator<class std::vector<float,class std::allocator<float> > > > *,float,float,int)" (?fillBorderVertexes@@YAXPAVTransparentMaze@@PAV?$vector@V?$vector@MV?$allocator@M@std@@@std@@V?$allocator@V?$vector@MV?$allocator@M@std@@@std@@@2@@std@@MMH@Z) referenced in function "public: virtual void __thiscall Window::draw(void)" (?draw@Window@@UAEXXZ)
1>C:\Users\Asus\Desktop\VC++\PacMan\Debug\PacMan.exe : fatal error LNK1120: 1 unresolved externals

Связано ли это с чем-то таким, что значение указателя или некоторые его части не видны внутри этой функции?

void Window::draw() {
::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // Clear Screen And Depth Buffer
::glLoadIdentity();

void fillBorderVertexes(TransparentMaze*, vector<vector<GLfloat>>*, GLfloat, GLfloat, int);
void fillMazeVertexes(vector<vector<GLfloat>>*, Room*, GLfloat, GLfloat, int);
void drawMaze(vector<vector<GLfloat>>*, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);

static vector<vector<GLfloat>> borderVertexes;
static vector<vector<GLfloat>> mazeVertexes;
static bool done = false;

std::map<Point, Room*, compare>::iterator it = maze->getMaze().begin();

GLfloat x = ((GLfloat)it->first.getX() - 0.5f) * (room + border) - ((GLfloat)maze->getWidth() / 2.0f * (room + border));
GLfloat y = ((GLfloat)maze->getHeight() / 2.0f * (room + border)) - ((GLfloat)it->first.getY() - 0.5f) * (room + border);

if (!done) {
    // The problem is in this function with the first variable
    fillBorderVertexes(&*maze, &borderVertexes, room, border, ANGULAR_CORNERS);

    fillMazeVertexes(&mazeVertexes, &*it->second, room, border, ANGULAR_CORNERS);
    done = true;
}

drawMaze(&mazeVertexes, x, y, imageW, imageH, imageD);

::SwapBuffers(hdc);
}

Ответы [ 2 ]

1 голос
/ 26 ноября 2011

Убедитесь, что определение функции fillBorderVertexes() точно соответствует объявлению. Например, если следующее определение:

void fillBorderVertexes(TransparentMaze, vector<vector<GLfloat>>*, GLfloat, GLfloat, int)
{
}

Компоновщик выдаст ошибку, так как первый параметр определен как TransparentMaze* в объявлении, но как TransparentMaze в определении.

1 голос
/ 25 ноября 2011

Да, я считаю, что компилятор не может найти определение функции fillBorderVertexes. Существует ли файл .cpp, в котором есть реализация в проекте?

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