﻿# V1043\. A global object variable is declared in the header\. Multiple copies of it will be created in all translation units that include this header file\.

The analyzer has detected a declaration of a constant object in a header file\. Including this file using the 'include' directive will result in creating multiple copies of that object\. If the class has a constructor, it will be called each time the header is included, which may have undesirable side effects\.

For example:

```cpp
//some_header.h

class MyClass
{
  int field1;
  int field2;
  MyClass (int a, int b)
  {
    // ....
  }
};

// ....

const MyClass object{1, 2}; // <=
```

The diagnostic ignores classes and structures with no constructors defined\. The following code snippet will not trigger the warning:

```cpp
//some_header.h

struct MyStruct
{
  int field1;
  int field2;
};

// ....

const MyStruct object{1, 2};
```

You can also avoid this error by declaring the variable as 'inline' \(starting with C\+\+17\) or 'extern'\. With this fix, the variable initialization and constructor call will be performed only once\.

Fixed version:

```cpp
//some_header.h

class MyClass
{
  // ....
};

// ....

inline const MyClass object{1, 2};
```

**Note:** using the 'constexpr' keyword instead of 'const' in the variable declaration doesn't change this behavior\. According to the [C\+\+17 standard](http://eel.is/c++draft/dcl.constexpr#1.sentence-2), only constexpr functions and static constexpr class/structure fields are implicitly declared as inline\.

This issue is discussed in detail in the article "[What Every C\+\+ Developer Should Know to \(Correctly\) Define Global Constants](https://www.fluentcpp.com/2019/07/23/how-to-define-a-global-constant-in-cpp/)"\.