обработка ошибки связи с вторичными .cpp и .h

Во-первых, фрагменты кода, с которыми у меня возникают проблемы;

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
}

мои проблемы:

  1. выполнение кода в этом формате запускает проверку оператора if и закрывает программу.

  2. если я удаляю пространство имен анонимно, я получаю ошибки LNK 2005 для переменных.

  3. Я МОГУ заставить код работать, если я просто закомментирую ВСЕ из settings.cpp и вставлю определение функции в заголовочный файл, но это для меня короткое исправление.

что мне нужно: очевидно, больше понимания заголовочных и вторичных файлов .cpp … и, возможно, ссылки. У меня есть пара книг; «программирование 2d игр» Келли, «начало программирования игр» Харбором и «Visual C ++ 2010» Хортоном. Может ли кто-нибудь указать мне направление, где можно более подробно изучить мою проблему: заставить функции жить в .cpp, а объявления живут в заголовке, или порекомендовать книгу, которая научит меня понимать эти проблемы?

Редактирование решения: Кредит достается Матсу Петерссону (см. Комментарии)

решение для кода оказалось;

  1. удалить анонимное пространство имен и скобки.
  2. применять префикс extern перед объявлениями типов глобальных переменных в settings.h.
  3. ДОБАВЬТЕ объявление обычной глобальной переменной (например, int window_width;) в файл settings.cpp.

0

Решение

Имена WINDOW_HEIGHT а также WINDOW_WIDTH скорее всего используются как макросы или другие имена в среде Windows. Использование переменных, которые являются именами в верхнем регистре, как правило, плохая идея, так как это соглашение для макросов, поэтому вероятность случайного конфликта с каким-либо макросом, определенным в некотором заголовочном файле, который вы даже не знали, был включен больше.

Я бы посоветовал вам изменить имена ваших переменных, чтобы они не конфликтовали — простой способ сделать это — использовать имена в нижнем регистре, window_height а также window_width, так далее.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]