В некотором смысле академический вопрос, но я столкнулся с этим при написании некоторых модульных тестов.
Моя инфраструктура модульного тестирования (UnitTest ++) позволяет создавать структуры, служащие в качестве приборов. Обычно они настраиваются для тестов в файле, поэтому я помещаю их в начало моего файла модульных тестов.
//Tests1.cpp
struct MyFixture { MyFixture() { ... do some setup things ...} };
TEST_FIXTURE(MyFixture, SomeTest)
{
...
}
//Tests2.cpp
struct MyFixture { MyFixture() { ... do some other setup things, different from Tests1}};
TEST_FIXTURE(MyFixture, SomeOtherTest)
{
...
}
Однако недавно я обнаружил (по крайней мере с VS2005), что когда вы называете структуру фикстура, используя одно и то же имя (так что теперь две версии структуры существуют с одинаковым именем), тогда одна из версий молча выброшен . Это довольно удивительно, потому что мой компилятор установлен на / W4 (самый высокий уровень предупреждения), и предупреждение не выдается. Я предполагаю, что это конфликт имен, и почему были изобретены пространства имен, но нужно ли мне оборачивать каждое из моих модульных тестовых устройств в отдельное пространство имен? Я просто хочу убедиться, что я не пропускаю что-то более фундаментальное.
Есть ли лучший способ исправить это - должно ли это происходить? Разве я не вижу ошибку повторяющихся символов или что-то в этом роде?