variável de classe de matriz estática “multiple definition” C ++

Eu estou escrevendo algum código onde eu preciso ter uma variável de classe que é uma matriz int estática. Eu entendo que eu posso fazer isso com algo parecido com isso no arquivo de cabeçalho, A.h:

#ifndef A_H_
#define A_H_

class A
{
public:
  static const int a[];
};

const int A::a[] = {1,2};

#endif

Isso funciona muito bem se eu estou incluindo este cabeçalho em apenas um outro arquivo, algo como o seguinte, main.cpp:

#include "A.h"

#include <iostream>
using namespace std;

int main()
{

  A myA;  
  cout << "0: " << myA.a[0] << endl;
  cout << "1: " << myA.a[1] << endl;
}

Mas suponha que eu precise que minha classe A seja um pouco mais complicada, e eu quero ter um arquivo A.cpp também. Vou manter o meu arquivo main.cpp o mesmo, mas depois mude o A.h da seguinte maneira (acabei de adicionar uma função, printA):

#ifndef A_H_
#define A_H_

class A
{
public:
  void printA() const;
  static const int a[];
};

const int A::a[] = {1,2};

#endif

E então no arquivo A.cpp:

#include "A.h"

#include <iostream>
using namespace std;

void A::printA() const
{

  cout << "Printing in A.cpp." << endl;
  cout << "A.0: " << a[0] << endl;
  cout << "A.1: " << a[1] << endl;

}

Compilando A.o com gcc -o A.o -c A.cpp está bem. Mas vincular isso ao compilar main.cpp (gcc -o atest main.cpp A.o) falha com "múltipla definição de` A :: a '".

Eu tenho vasculhado a Internet em busca de soluções, e encontrei pessoas que têm variáveis ​​declaradas em seus cabeçalhos que recebem o erro de "múltipla definição" quando incluem o cabeçalho em vários lugares, e a solução parece ser declarar a variável extern no cabeçalho, defina-o em apenas um arquivo de origem (não-cabeçalho). Mas não posso declarar uma variável de classe tanto estática quanto externa, posso? Se eu tentar, ou se apenas declarar extern, recebo um aviso sobre a variável não estar estática (também um erro de "especificadores conflitantes" quando tento ambos).

Então, minha pergunta: é possível ter variáveis ​​de classe de matriz estática no caso de o arquivo de cabeçalho precisar ser incluído em mais de um arquivo de origem? Se sim, como?

questionAnswers(2)

yourAnswerToTheQuestion