ヘッダーで静的const配列を宣言し、それをcppファイルに実装しましたが、何が起こっているのか理解できません。
Subsys.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名を使用しました。同じ問題が発生します。