#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. Вам нужно определить его в глобальной области видимости, чтобы сделать его доступным для других модулей.