неразрешенный внешний символ или ошибка в 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_;
}