неразрешенный внешний символ или ошибка в namespace

Подскажите пожалуйста понять, в чем именно состоит ошибка "неразрешенный внешний символ":

Ошибка LNK2001 неразрешенный внешний символ "class namespace1::my_class namespace1::my_class_" (?my_class_@namespace1@@3Vmy_class@1@A).

main.cpp

 #include <iostream> 
    #include "My_function.h"
    
    
    int main()
    {
    
        My_function();
    
    }

my_function.cpp

 #include "my_class.h"
    #include "My_function_second.h"
    
    
    
    
        thread_local namespace1::my_class my_class_;
    
    
        void My_function()
        {
            namespace1::My_function_second();
        }

My_function_second.cpp

 #include "my_class.h"
    
    
    namespace namespace1
    {
    
        extern thread_local my_class my_class_;
    
    
        void My_function_second()
        {
            my_class_.my_void();
        }
    
    }

my_class.h

 namespace namespace1
    {
    
    
        class my_class
        {
    
        public:
    
            void my_void()
            {
            }
    
        };
    
    
    }

Если убрать namespace1, то ошибка пропадает, то есть ошибка явно в namespace1, но я не могу понять чем именно то.


Ответы (1 шт):

Автор решения: HolyBlackCat

В thread_local namespace1::my_class my_class_;, namespace1:: действует только на тип, а не на саму переменную.

Правильно - вот так:

thread_local namespace1::my_class namespace1::my_class_;

Или так:

namespace namespace1
{
    thread_local my_class my_class_;
}
→ Ссылка