C++ GCC-具有相同名称的不同类的错误

C++ GCC-具有相同名称的不同类的错误,c++,class,gcc,build,linker,C++,Class,Gcc,Build,Linker,假设我有两个文件: a、 cpp b、 cpp 我想在构建过程中得到一个错误。我该怎么办?(我不介意使用一些外部工具)。这是因为每个c/cpp文件都是一个编译单元,彼此分开,如果您真的想验证这一点,您可以将编译器生成的*.o文件objdump,用一些脚本解析它们,看看这个不相关。很好奇为什么你希望这是一个错误。看看我对阿隆答案的评论主要问题是vtables损坏,第二个问题是在需要不同表示的不同编译单元之间传递Cs。那么您是否要引用在另一个编译单元中声明的C类型的全局变量?否,因为我有一个命名约定

假设我有两个文件:

a、 cpp

b、 cpp


我想在构建过程中得到一个错误。我该怎么办?(我不介意使用一些外部工具)。

这是因为每个c/cpp文件都是一个编译单元,彼此分开,如果您真的想验证这一点,您可以将编译器生成的*.o文件objdump,用一些脚本解析它们,看看这个不相关。

很好奇为什么你希望这是一个错误。看看我对阿隆答案的评论主要问题是vtables损坏,第二个问题是在需要不同表示的不同编译单元之间传递Cs。那么您是否要引用在另一个编译单元中声明的
C
类型的全局变量?否,因为我有一个命名约定gcc插件,它强制执行一个命名约定来阻止它(:那么您的用例是什么?您是否要将指向
C
的指针传递到另一个TU中定义的函数,从而引用错误的
C
?我考虑过这个解决方案。它不适用于上述情况,但适用于更危险的情况。只要不同的模块不使用,上述情况相对无害尝试将对象相互传递,每个对象都有不同的类。更危险的情况是,对象具有虚拟函数,然后gcc为其中一个类生成损坏的vtable。这种情况可以通过搜索vtable符号来捕获。实际上,即使它们不传递,但每个定义都不同,您仍然会感到意外在C++标准中,ED行为(比如说,除非内联)是正确的,但是我相信GCC会处理它(可能是错误的)。
class C { int x; };
class C { string s; };