Cześć,
kolejny dzień, kolejny błąd (a w zasadzie już siedzę nad nim parę dni). Próbuję zainicjalizować klasę enum wartościami, ale coś mi nie idzie. Głupi jestem, bo jakoś na samym początku to działało, ale nie wrzuciłem kodu na repo i po dodaniu nowego kodu już nie działa i nie wiem czemu XD. Sytuacja wygląda tak: chcę zainicjalizować w przestrzeni nazw pola, aby wszędzie w projekcie był do nich dostęp, ale w plikach, w których używam enum dostaję błędy, że pola są już zdefiniowane w pliku implementacyjnym klasy:
jakiś_plik.obj : error LNK2005: "enum Game::Color Colours::red" (?red@Colours@@3W4Color@Game@@A) already defined in Game.obj
Game.h:
class Game final {
public:
explicit Game() noexcept;
enum class Color { red, blue, green, yellow };
static void setConsoleTextColoured(const Color&);
static void setConsoleTextDefault();
//...
};
namespace Colours {
Game::Color red = Game::Color::red;
Game::Color blue = Game::Color::blue;
Game::Color green = Game::Color::green;
Game::Color yellow = Game::Color::yellow;
}
Game.cpp:
#include "Game.h"
void Game::setConsoleTextColoured(const Color& color) { //to jest jedyna metoda, która ma jakikolwiek związek z enum w pliku implementacyjnym.
consoleColorHandle::hOut = GetStdHandle(STD_OUTPUT_HANDLE);
switch (color) {
case Game::Color::red: SetConsoleTextAttribute(consoleColorHandle::hOut, 12); break;
case Game::Color::green: SetConsoleTextAttribute(consoleColorHandle::hOut, 10); break;
case Game::Color::blue: SetConsoleTextAttribute(consoleColorHandle::hOut, 11); break;
case Game::Color::yellow: SetConsoleTextAttribute(consoleColorHandle::hOut, 14); break;
}
}
jakiś_plik.cpp:
Game::setConsoleTextColoured(Colours::red); //przykładowe użycie metod w dowolnym pliku.
Game::setConsoleTextDefault();
domyślam się, że problem leży w tym, że są to statyczne metody i po prostu pola nie są zdefiniowane(?) w czasie kompilacji. Tylko jak je teraz zdefiniować tak, aby były widoczne w całym projekcie?
Dzięki, pozdro.