Это, естественно, работает, когда объявления и реализация разнесены по разным файлам. Но у меня класс шаблонный, целиком определен в хедере и поэтому при линковке генерится ошибка multiple definition of SomeClass::A, потому что хедер включается в несколько файлов.
Собственно, как быть? Отдельный файл специально под это дело заводить не хочется.
гм, я действительно делал для нешаблонного класса и оно не линковалось. Получается, что для нешаблонного нельзя что ли? Придется заводить отдельный файл?
тред полностью читал, анон? автор уже хочет без темплейта, судя по
гм, я действительно делал для нешаблонного класса и оно не линковалось. Получается, что для нешаблонного нельзя что ли? Придется заводить отдельный файл?
дурилка картонная... воспитатель в детсаде научил таким словишкам?
Блин, я на самом деле конечно затупил и написал так, что получилось мутно, т.к. я чрезмерно упростил пример. Я случайно на это наткнулся, поэтому и удивился. У меня на самом деле так: есть шаблонный класс, который полностью определен в хедере. В этому же хедере от него с известным типом наследуется уже обычный класс, который тривиален и перегружает пару методов и добавляет эту самую константу. Ради него не хочется заводить отдельный файл, ну и хочется чтобы константа была его статическим членом. Не ахти какая проблема, просто для интереса создал тему.
ну... в каждом объектном файле будет свое определение переменной с внутренней линковкой. т.е по сути это будут разные переменные, но с одинаковым значением. их адреса соответственно будут отличаться. в общем, для встроенных типов ничего страшного. с синглтоном же, к примеру, так поступать не стоит :)
Да уж. Выражение &AAA::value ведь будет иметь во всех файлах одинаковое значение, да?
Правильно ли я понимаю, что в этом случае до вызова main будет в каждом файле сгенерирован вызов конструктора типа константы (у нас double), и присваивание получившегося объекта статическому полю класса value? Т.е. сколько файлов, столько раз будет перезаписываться поле, каждый раз на одно и то же значение? Это получается некислый способ прострелить себе коленку, если константа не встроенного типа.
Мда. Лучше уж отдельный файл завести, а то потом может себе дороже выйти. Объявленный статически объект со своим адресом в каждом файле не есть хорошо. Спасибо за ответы!
(зы говоря о конструкторах, я и имел в виду, конечно, невстроенные типы)