У меня есть пара классов.У одного из них есть набор статических констант uint32_t (следующий код является урезанным примером):
class Foo {
public:
static const uint32_t BAZ;
void RunMe(void);
};
class Bar {
public:
void RunMeAlso(void);
};
Я делаю обычные вещи по одному классу на файл cpp, так как реальные классы довольнозначительный, но я столкнулся с проблемой.И Foo::RunMe()
, и Bar::RunMeAlso()
имеют доступ к значению Foo::BAZ
.
. У меня есть определение const uint32_t Foo::BAZ = 1;
в файле foo.cpp, но он содержит ошибку компиляции в bar.cpp (где ониспользуется в качестве метки регистра в операторе switch) в VS2010 (хотя этот код должен быть переносимым, но я еще не проверял его с помощью gcc).Оба заголовочных файла включены в оба исходных файла ... и попытка поместить какую-то внешнюю ссылку в bar.cpp, чтобы сообщить компилятору, что он находится в другом модуле перевода, это не решает (создает больше ошибок компиляции) ...и, конечно, все примеры, которые я нашел по этому виду, относятся к тривиальному случаю отдельных классов / файлов, когда кто-то не знал / забыл использовать определение в дополнение к объявлению.
Мысликто-нибудь, как решить это?(Я бы предпочел не использовать enum, но будет, если это единственный другой вариант, так как я уверен, что он скомпилируется!)
TIA,
-J