рассмотрим следующий код:шаблона класса, в C++
//header.h
template<class T>
class A
{
static int x;
};
template<class T>
int A<T>::x = 0;
//source1.cpp
#include "header.h"
void f(){} // dummy function
//main.cpp
#include "header.h"
int main(){}
В этом случае код компилирует совершенно без ошибок, но если удалить шаблон спецификатор из класса
class A
{
static int x;
};
int A::x = 0;
- В этот компилятор случая ошибочен с множественным определением x. Может ли кто-нибудь объяснить это поведение?
- И когда статическая переменная класса шаблона инициализируется/создается?
1) Члены шаблона класса создаются только при необходимости. 2) Это сложный вопрос. –
Возможный дубликат [Статическая переменная шаблона] (http://stackoverflow.com/questions/1553854/template-static-variable) – Quentin
Короче говоря, ** никогда ** не создавайте статику в заголовочных файлах, это почти каждый раз будет создавать проблемы , Каждый раз, когда заголовочный файл включается, статика создается. – bkausbk