Я знаю, рекомендовано , чтобы объявления классов были в заголовочном файле, а инициализация членов класса - в исходном файле.Однако, поскольку мой объект структуры (compound
) объявлен как static constexpr
, я считаю, что могу определить его в файле заголовка (показан ниже).
header1.h:
namespace common
{
namespace abc
{
struct compound
{
unsigned int intgr1;
unsigned int intgr2;
unsigned int intgr3;
};
}
}
test.h:
#include "header1.h"
namespace common
{
namespace def
{
class xyz
{
// public: ...
private:
static constexpr abc::compound foo =
{0, 1, 2}; // <--- C4268 warning here
};
}
}
test.cpp:
#include "test.h"
namespace common
{
namespace def
{
constexpr abc::compound xyz::foo;
}
}
Однако, это дает мне предупреждение компилятора уровня 4 (MSVS 2015) (C4268 - показанное выше в тесте.h) с указанием:
'private: static common::abc compound common::def::xyz::foo':'const'
static/global data initialized with compiler generated constructor fills the
object with zeros
Что означает это предупреждение?Есть ли лучший способ инициализации этой структуры?