Я объявил статический массив const в заголовке, а затем реализовал его в файле cpp, но не могу понять, что происходит.
Подсистема.h:
#ifndef _SUBSYS_H
#define _SUBSYS_H
namespace Engines
{
namespace Particles
{
class SubSys : public ISubSys
{
private:
static const int _M[ 3 ];
...
//rest of class
};
}
}
#endif
Subsys.cpp:
#include "Subsys.h"
namespace Engines
{
namespace Particles
{
const int SubSys::_M[ 3 ] =
{
0x80,
0x7f,
0x01
};
}
}
ошибка LNK2001: неразрешенный внешний символ "private static int const * const Engines::Particles::SubSys::_M" (?_M@SubSys@Particles@Engines@@0QBIB)
Если я реализую массив в заголовке вне класса, я не получаю ошибку LNK2001 в приложении, использующем статическую библиотеку. Однако я получаю LNK4006 при компиляции статической библиотеки (т.е. символ добавляется более одного раза).
Я также удалил пространства имен в файле .cpp и использовал полное имя Engines::Particles::SubSys::_M. Возникает та же проблема.