Есть два класса с одинаковыми именами, которые находятся в разных файлах ( но с одинаковыми названиями ) в разных папках. Классы обёрнуты в разные пространства имён, и, читая ответы на другие вопросы, конфликта между ними не должны произойти. Но при компиляции выдаёт ошибку "Ссылка на неразрешённый символ" на конструктор одного из классов. Также, если я уберу определение одного из классов нажимая на "Перейти к определению" он перебрасывает меня другому классу ( в 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>
. Соответственно имена единиц трансляции необходимо выбирать уникальными в рамках одного проекта, даже если они располагаются в разных папках, иначе будете получать конфликты и прочие проблемы при сборке.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь разобраться в многопоточности и mutexПо задумке сначала должен выполниться thread Calc(Stream), после его окончания должен выполниться thread...