переменная класса статического массива «множественное определение» C ++

Я пишу некоторый код, где мне нужно иметь переменную класса, которая является статическим массивом int. Я понимаю, что я могу сделать это с чем-то вроде этого в заголовочном файле, A.h:

#ifndef A_H_
#define A_H_

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

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

#endif

Это прекрасно работает, если я включу этот заголовок только в один другой файл, что-то вроде следующего, 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;
}

Но предположим, что мой класс A должен быть немного более сложным, и я также хочу иметь файл A.cpp. Я сохраню свой файл main.cpp таким же, но затем изменю A.h следующим образом (я только что добавил функцию 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.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;

}

Компиляция A.o с помощью gcc -o A.o -c A.cpp - это хорошо. Но связать это при компиляции main.cpp (gcc -o atest main.cpp A.o) не удается с «множественным определением« A :: a »».

Я искал в Интернете решения и нашел людей, у которых переменные, объявленные в заголовках, получили «множественное определение». ошибка, когда они включают заголовок в нескольких местах, и, кажется, решение состоит в том, чтобы объявить переменную extern в заголовке, а затем определить ее только в одном исходном (не заголовочном) исходном файле. Но я не могу объявить переменную класса как статическую, так и внешнюю, не так ли? Если я пытаюсь или просто объявляю его extern, я получаю предупреждение о том, что переменная не является статической (также ошибка «конфликтующие спецификаторы» при попытке обоих).

Итак, мой вопрос: возможно ли иметь статические переменные класса массива в случае, если файл заголовка должен быть включен в более чем один исходный файл? Если так, то как?

Ответы на вопрос(2)

Ваш ответ на вопрос