Есть два класса с одинаковыми именами, которые находятся в разных файлах ( но с одинаковыми названиями ) в разных папках. Классы обёрнуты в разные пространства имён, и, читая ответы на другие вопросы, конфликта между ними не должны произойти. Но при компиляции выдаёт ошибку "Ссылка на неразрешённый символ" на конструктор одного из классов. Также, если я уберу определение одного из классов нажимая на "Перейти к определению" он перебрасывает меня другому классу ( в Visual Studio 2019 ). Что я делаю не так?
Вот примерно ситуация
// Folder1/file.h
namespace A
{
class Test
{
public:
Test();
}
}
// Folder1/file.cpp
#include "file.h"
A::Test::Test()
{
// Определение
}
// Folder2/file.h
namespace B
{
class Test
{
public:
Test();
}
}
// Folder2/file.cpp
#include "file.h"
B::Test::Test()
{
// Другое определение
}
A::Test test1 = A::Test(); // Работает
//B::Test test2 = B::Test(); // Если раскомментировать, будет ошибка
И вот скрин ( Как видно, открылось определение класса в другом namespace, а слева структура проекта ), возможно он прояснит ситуацию
Visual Studio при сборке генерирует объектные файлы для каждой единицы трансляции в промежуточной папке сборки (Intermediate Directory) независимо от нахождения .cpp файла этой единицы трансляции в иерархии папок и выбирает для них имя <имя_исходного_файла_без_расширения.obj>
. Соответственно имена единиц трансляции необходимо выбирать уникальными в рамках одного проекта, даже если они располагаются в разных папках, иначе будете получать конфликты и прочие проблемы при сборке.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь разобраться в многопоточности и mutexПо задумке сначала должен выполниться thread Calc(Stream), после его окончания должен выполниться thread...