다소 학문적 인 질문이지만 단위 테스트를 작성하는 동안이 문제가 발생했습니다.C++/VS2005 : 두 개의 서로 다른 .cpp 파일에 동일한 클래스 이름 정의
내 단위 테스트 프레임 워크 (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 (가장 높은 경고 수준)로 설정된 컴파일러가 있고 경고가 나오지 않기 때문에 꽤 놀라운 것입니다. 나는 이것이 이름 충돌이고, 왜 네임 스페이스가 발명 되었는가를 추측하지만, 각각의 네임 테스트 픽스쳐를 별도의 네임 스페이스에 랩핑해야합니까? 나는 단지 내가 더 근본적인 것을 놓치지 않고 있는지 확인하고 싶다.
문제를 해결할 수있는 더 좋은 방법이 있습니까? 중복되는 심볼 오류 또는 다른 것을 보지 않아야합니까?
+1 이것은 익명의 네임 스페이스가 해결할 수있는 정확한 문제입니다 –
두 개의 조명기 중 하나가 링커의 단어가 아닌 다른 것을 자동으로 덮어 쓸 것으로 예상됩니까? –
잊어 버려 - 알 수 있습니다. 나는 틀린/멍청하게 구조체 타입에 이름 맹 글링 (mangling)이 적용될 것이라고 생각했기 때문에 링커는 그 차이를 알 수 있었다. –