使用相同的类名

时间:2012-08-11 19:43:16

标签: c++ class

我创建了两个不同的头文件,每个头文件包含一个具有相同名称的类,每个文件都包含在不同的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被调用,当然它还没有被正确初始化

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

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

我应该提一下,我在Debian Linux上使用gcc 4.7.1。

3 个答案:

答案 0 :(得分:4)

这违反了One Definitlion Rule和未定义的行为。

答案 1 :(得分:3)

标准规定,如果您违反此特定规则,则调用未定义的行为。因此,您的案例没有标准行为。但你可以期待它不起作用。编译器遵循标准做某事,因为“某事”是“未定义行为”的一部分。

答案 2 :(得分:2)

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