statyczna zmienna klasy tablicy „wiele definicji” C ++

Piszę jakiś kod, w którym muszę mieć zmienną klasy, która jest statyczną tablicą int. Rozumiem, że mogę to zrobić za pomocą czegoś takiego w pliku nagłówkowym, A.h:

#ifndef A_H_
#define A_H_

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

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

#endif

Działa to dobrze, jeśli dołączę ten nagłówek tylko do jednego innego pliku, takiego jak poniższy, 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;
}

Ale przypuśćmy, że potrzebuję mojej klasy A, aby była nieco bardziej skomplikowana i chcę mieć również plik A.cpp. Zachowam ten sam plik main.cpp, ale zmienię A.h w następujący sposób (właśnie dodałem funkcję, printA):

#ifndef A_H_
#define A_H_

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

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

#endif

A potem w pliku 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;

}

Kompilowanie A.o z gcc -o A.o -c A.cpp jest w porządku. Ale połączenie tego podczas kompilowania main.cpp (gcc -o atest main.cpp A.o) kończy się niepowodzeniem z „wielokrotną definicją` A :: a '”.

Przeszukiwałem Internet w poszukiwaniu rozwiązań i znalazłem ludzi, którzy zadeklarowali zmienne w nagłówkach, którzy otrzymali błąd „wiele definicji”, gdy zawierają nagłówek w wielu miejscach, a rozwiązaniem wydaje się zadeklarować zmienną zewnętrzną w nagłówek, a następnie zdefiniuj go tylko w jednym źródłowym pliku źródłowym (innym niż nagłówek). Ale nie mogę zadeklarować zmiennej klasy zarówno statycznej, jak i zewnętrznej, czyż nie? Jeśli spróbuję, lub jeśli zadeklaruję to jako extern, otrzymam ostrzeżenie o tym, że zmienna nie jest statyczna (także błąd „konfliktowych specyfikatorów” podczas próby obu).

Moje pytanie: czy możliwe jest posiadanie zmiennych klasy tablicy statycznej w przypadku, gdy plik nagłówkowy musi być zawarty w więcej niż jednym pliku źródłowym? Jeśli tak to jak?

questionAnswers(2)

yourAnswerToTheQuestion