C++/VS2005:在两个不同的 .cpp 文件中定义相同的类名

2023-12-22

有点学术问题,但我在编写一些单元测试时遇到了这个问题。

我的单元测试框架 (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(最高警告级别)并且没有发出任何警告。我想这是一个名称冲突,以及为什么发明了命名空间,但是我真的需要将每个单元测试装置包装在单独的命名空间中吗?我只是想确保我没有遗漏一些更基本的东西。

有没有更好的方法来解决这个问题——这种情况应该发生吗?我不应该看到重复符号错误或其他错误吗?


尝试将类粘贴在匿名名称空间中,您可能会发现它比为每个文件创建和命名新名称空间更令人讨厌。

无法访问 VS2005 和 Cpp 单元,但这可能有效。

//Tests1.cpp
namespace
{
struct MyFixture {  MyFixture() { ... do some setup things ...} };
}

TEST_FIXTURE(MyFixture, SomeTest)
{
  ...
} 


//Tests2.cpp
namespace
{
struct MyFixture { MyFixture() { ... do some other setup things, different from Tests1}};
}

TEST_FIXTURE(MyFixture, SomeOtherTest)
{
 ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++/VS2005:在两个不同的 .cpp 文件中定义相同的类名 的相关文章

随机推荐