Во-первых, фрагменты кода, с которыми у меня возникают проблемы;
settings.h
namespace
{
int WINDOW_WIDTH;
int WINDOW_HEIGHT;
bool FULLSCREEN;
}
void settings_init();
settings.cpp
#include "DX_Constants.h"
void settings_init()
{
WINDOW_WIDTH = 1920;
WINDOW_HEIGHT = 1080;
FULLSCREEN = true;
}
main.cpp // просто важная часть .. я не забыл другие части, необходимые для winapi
#include "settings.h"
int WINAPI WinMain(...)
{
settings_init();
if(//verifies values entered are seen here correctly ...NOTE triggers on != )
return false;....code continues
}
мои проблемы:
выполнение кода в этом формате запускает проверку оператора if и закрывает программу.
если я удаляю пространство имен анонимно, я получаю ошибки LNK 2005 для переменных.
Я МОГУ заставить код работать, если я просто закомментирую ВСЕ из settings.cpp и вставлю определение функции в заголовочный файл, но это для меня короткое исправление.
что мне нужно: очевидно, больше понимания заголовочных и вторичных файлов .cpp … и, возможно, ссылки. У меня есть пара книг; «программирование 2d игр» Келли, «начало программирования игр» Харбором и «Visual C ++ 2010» Хортоном. Может ли кто-нибудь указать мне направление, где можно более подробно изучить мою проблему: заставить функции жить в .cpp, а объявления живут в заголовке, или порекомендовать книгу, которая научит меня понимать эти проблемы?
Редактирование решения: Кредит достается Матсу Петерссону (см. Комментарии)
решение для кода оказалось;
Имена WINDOW_HEIGHT
а также WINDOW_WIDTH
скорее всего используются как макросы или другие имена в среде Windows. Использование переменных, которые являются именами в верхнем регистре, как правило, плохая идея, так как это соглашение для макросов, поэтому вероятность случайного конфликта с каким-либо макросом, определенным в некотором заголовочном файле, который вы даже не знали, был включен больше.
Я бы посоветовал вам изменить имена ваших переменных, чтобы они не конфликтовали — простой способ сделать это — использовать имена в нижнем регистре, window_height
а также window_width
, так далее.
Других решений пока нет …