Статический константный инициализированный член класса C ++ выдает ошибку двойного символа при компоновке - PullRequest
2 голосов
/ 22 мая 2010

У меня есть класс, который имеет статический массив const, его нужно инициализировать вне класса:

class foo{  
static const int array[3];  
};    
const int foo::array[3] = { 1, 2, 3 };

Но тогда я получаю дубликат символа foo :: array в foo.o и main.o foo.o содержит класс foo, а main.o содержит main () и использует экземпляры foo.
Как я могу разделить этот статический константный массив между всеми экземплярами foo? Я имею в виду, что это идея статического члена.

1 Ответ

8 голосов
/ 22 мая 2010

Инициализируйте его в соответствующем файле .cpp, а не в файле .h.

Когда вы #include, это директива препроцессора, которая в основном копирует дословно файл в расположение #include. Таким образом, вы инициализируете его дважды, включив его в 2 разных модуля компиляции.

Компоновщик видит 2 и не знает, какой использовать. Если бы вы только инициализировали его в одном из исходных файлов, его содержал бы только один .o, и у вас не было бы проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...