Ошибка в многофайловом проекте

eblan
Начинающий
Статус
Оффлайн
Регистрация
30 Окт 2017
Сообщения
43
Реакции[?]
4
Поинты[?]
0
Может не создание читов, но похоже.
Короче, решил писать игру и в начале понял шо я даун.
Ошибка:

1>gameMain.obj : error LNK2001: неразрешенный внешний символ ""class CVars * g_Vars" (?g_Vars@@3PEAVCVars@@EA)"
1>C:\Users\BYTE\source\repos\SFML TestApp\x64\Debug\SFML TestApp.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Файлы:
RenderManager.cpp:

C++:
void GameRender::DrawManager() {
    
}

void GameRender::DrawMenu() {

}
RenderManager.h:
C++:
#include "Vars.h"

namespace GameRender {
    void DrawManager();
    void DrawMenu();
}
Vars.h:
C++:
#pragma once

class CVars {
public:
    const int WINDOW_WIDTH = 720;
    const int WINDOW_HIGHT = 480;

    bool gameMenuOn = true;
}; extern CVars* g_Vars;
gameMain.cpp:
C++:
#pragma warning(disable : 4996)

// ~~~~~~~~~~~~ [ Includes ] ~~~~~~~~~~~~
#include <SFML/Graphics.hpp> // Библиотека SFML
#include <SFML/System.hpp> // Библиотека SFML

#include "Vars.h" // Глобальные переменные
#include "RenderManager.h" // Рендер менеджер
// ~~~~~~~~~~~~ [ Func's ] ~~~~~~~~~~~~

// ~~~~~~~~~~~~ [ Code ] ~~~~~~~~~~~~
int main() {
    using namespace sf;
    RenderWindow window(VideoMode(g_Vars->WINDOW_WIDTH, g_Vars->WINDOW_HIGHT), "SNAKE R[O]SHEN", Style::Close);

    ///Thread input_thread(&GlobalInput);
    //input_thread.launch();

    // end
    while (window.isOpen()) {
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
        window.clear();
        GameRender::DrawManager();
        window.display();
    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
17 Мар 2018
Сообщения
21
Реакции[?]
5
Поинты[?]
0
Я думаю, лучше сделать доступ к значениям через instance.


C++:
// .h file
#pragma once

class CVars {
public:
    const int WINDOW_WIDTH = 720;
    const int WINDOW_HIGHT = 480;

    bool gameMenuOn = true;

    static CVars* instance();
};

//.cpp
#include "CVars.h"

CVars* CVars::instance()
{
    static CVars _vars;
    return &_vars;
}

// пример
int value = CVars::instance()->WINDOW_HIGHT;
 
Сверху Снизу