使用相同的类名

using same class names

本文关键字:      更新时间:2023-10-16

我创建了两个不同的头文件,每个头文件都包含一个具有相同名称的类,并且每个头文件都包含在不同的cpp文件中,因此编译器不会抱怨重新定义它们

它们

像两个不同的类一样运行,除了它们具有相同的方法、相同的名称和相同的参数时,只调用其中一个,例如:

//on first cpp:
#include "same1.h"
//...
SameName obj(int_value);
obj.ok(int_value);
obj.not_ok();
//on second cpp
#include "same2.h"
//...
SameName obj(float_value);
obj.ok(float_value);
obj.not_ok();

在这两个文件上,调用了来自 same1.h 的not_ok,当然它还没有被正确初始化

我知道问题是什么以及为什么会发生这种情况,我也熟悉名称重整,并且在编译时它们都具有完全相同的名称。

我只想知道这是C++的标准行为,还是我的编译器是如何实现的,我的意思是,在这种情况下,所有编译器都应该做同样的事情吗?

我应该提到我在Debian Linux上使用gcc 4.7.1。

这违反了一个定义规则和未定义的行为。

该标准说,如果你违反了这个特定的规则,那么你就会调用未定义的行为。因此,您的情况没有标准行为。但你可以预期它不起作用。编译器通过做某事来遵循标准,因为"某事"是"未定义行为"的一部分。

通过在程序中包含同一类的两个不同定义,您违反了C++规则。因此,程序的行为是未定义的。

相关文章:
  • 没有找到相关文章