Ошибка компоновки в C ++ - PullRequest
0 голосов
/ 19 мая 2011

Я просто завершаю работу над проектом, над которым я работаю, чтобы визуализировать сцену в OpenGL - я основал часть этого на некотором старом коде, который я написал для класса Camera (так как я не хотел придется заново вычислять математику!), однако я бы включил класс Camera как часть main.cpp раньше, и я хотел переместить его в свои отдельные файлы .h / .cpp для повторного использования / ясности / общая хорошая практика.

Я также заменил базовую структуру, чтобы удерживать позиции мыши по x и y, на класс Mouse, который я написал.

Я изменил какой-то код в обработчике сообщений Windows, чтобы обновлять камеру при отпускании левой кнопки мыши - однако я получаю странную ошибку связывания -

1> main.obj: ошибка LNK2001: не устранена внешний символ "public: void __thiscall Camera :: moveCamera (int, int, int, int) " (? MoveCamera @ Camera @@ QAEXHHHH @ Z) * ​​1008 *

Код в обработчике сообщений Windows -

    case WM_LBUTTONUP:
        Mouse.SetPos(lParam); 
        x_mouse_end = Mouse.GetXPos();
        y_mouse_end = Mouse.GetYPos(); 
        Camera.moveCamera(x_mouse_start, y_mouse_start, x_mouse_end, y_mouse_end);
        SetCamera(); 
        break;

Параметры, которые я передаю в Camera.moveCamera (), являются целыми числами, как и должно быть.

Функция moveCamera () выглядит следующим образом -

//Moves the camera based on a user dragging the mouse 
inline void Camera::moveCamera(int old_x, int old_y, int new_x, int new_y)
{
    //To store the differences between the old and new mouse positions 
    int x_difference, y_difference; 

    //If the mouse was dragged to the right, move the camera right
    if(new_x > old_x)
    {
        x_difference = new_x - old_x;
        x_difference = x_difference / 25;

        if(yaw > 350)
        {
            yaw = 0;
        }
        else
        {
            yaw = yaw + x_difference;
        }
    }

    //If the mouse was dragged to the left, move the camera left
    if(new_x < old_x)
    {
        x_difference = old_x - new_x;
        x_difference = x_difference / 25;

        if(yaw < 10)
        {
            yaw = 360;
        }
        else
        {
            yaw = yaw - x_difference;
        }
    }

    //If the mouse was dragged down, move the camera down
    if(new_y < old_y)
    {
        y_difference = new_y - old_y;
        y_difference = y_difference / 20;

        if(pitch < 10)
        {
            pitch = 360;
        }
        else
        {
            pitch = pitch - y_difference;
        }
    }

    //If the mouse was dragged up, move the camera up
    if(new_y > old_y)
    {
        y_difference = old_y - new_y;
        y_difference = y_difference / 20;
        if(pitch > 350)
        {
            pitch = 0;
        }
        else
        {
            pitch = pitch + y_difference;
        }
    }

    //Update the camera position based on the new Yaw, Pitch and Roll
    cameraUpdate();

}

«camera.h» включен, как и должно быть, как и «mouse.h», и установлены экземпляры обоих классов -

Mouse Mouse;
Camera Camera;

Я в растерянности относительно того, что может отсутствовать.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

2 голосов
/ 19 мая 2011

Возможно, вы включили это определение moveCamera() в файл .cpp с ключевым словом "inline".Это может быть интерпретировано, что этот метод является локальным по отношению к .cpp, в котором он определен.Попробуйте удалить inline.

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