Я столкнулся с проблемой при написании кода C ++, который должен компилироваться в Visual Studio 2008 и в GCC 4.6 (и должен также компилироваться обратно в GCC 3.4): static const int
члены класса.
Прочие вопросы имеют охватываемых правил, необходимых для статических членов класса const int.В частности, стандарт и GCC требуют, чтобы переменная имела определение в одном и только одном объектном файле.
Однако Visual Studio создает ошибку LNK2005 при компиляции кода (в режиме отладки), который включает определение вфайл .cpp.
Некоторые методы, которые я пытаюсь выбрать между:
- Инициализируйте его значением в файле .cpp, а не в заголовке.
- Используйте препроцессор, чтобы удалить определение для MSVC.
- Замените его перечислением.
- Замените его макросом.
Последние два варианта не являютсяпривлекательным, и я, вероятно, не буду использовать ни один.Первый вариант прост - но мне нравится со значением в заголовке.
То, что я ищу в ответах, - это красивый, лучший метод для структурирования кода, чтобыосчастливить и GCC, и MSVC одновременно.Я надеюсь на что-то удивительно красивое, о чем я еще не думал.