Проблема с использованием объекта C , определенного в другом файле

#c #class #linker

#c #класс #компоновщик #c

Вопрос:

В моем main.cpp у меня есть это:

 #include "main.h"
int main(){
...
SDL_Window* gWindow = NULL;
SDL_Renderer* gRenderer = NULL;
if (initProg(gWindow, gRenderer) != 0){
    return 1;
}
atexit(SDL_Quit);

Player mainPlayer(gRenderer);
...
}
  

Где Player — это класс, определенный для player.h которого включен main.h , который выглядит следующим образом:

 ...
#include "player.h"
...
extern Player mainPlayer;
...
void handlePlayerInput(SDL_Event event);
...
  

Теперь позже в коде мне нужно вызвать handlePlayerInput() то, что я поместил в input.cpp файл, чтобы упорядочить свой код. Однако у меня возникли проблемы с доступом к mainPlayer объекту в виде следующего кода

 #include "main.h"
...
    case SDLK_d:
        mainPlayer.movePlayer(Vector2(1, 0));
        break;
...
  

ВОЗВРАТ:

 undefined reference to 'mainPlayer'
collect2: error: ld return 1 exit status
  

Я использую CMake для компиляции всего моего кода, куда я добавляю все исходные файлы, связанные с игрой (main.cpp , player.cpp , input.cpp , и т.д.) в библиотеку и связать эту библиотеку при компиляции исполняемого файла с остальным кодом, не связанным с игрой.

Комментарии:

1. Объявляете ли вы переменную MainPlayer в main.cpp как глобальная переменная? Т.е. это вне каких-либо функций?

2. MainPlayer в main.h принимает аргумент … softwaretestinghelp.com/cpp-errors

3. @Ian4264, я объявляю его как extern в main.h и определяю его в main() функции, так как мне нужно передать ему указатель gRenderer.

4. Вам нужно определить его в глобальной области видимости, чтобы сделать его доступным для других модулей.