【发布时间】:2014-05-06 12:02:41
【问题描述】:
让我有两个 cpp 文件:
//--a.cpp--//
class A
{
public:
void bar()
{
printf("class A");
}
};
//--b.cpp--//
class A
{
public:
void bar()
{
printf("class A");
}
};
当我编译并将这些文件链接在一起时,我没有错误。但是,如果我要写以下内容:
//--a.cpp--//
int a;
//--b.cpp--//
int a;
编译并链接此源后,我发现a 的重定义错误。但是在我重新定义的类的情况下,但没有引发错误。我很困惑。
【问题讨论】:
-
您可以将这些类定义放在一个未命名的命名空间中。
-
@TejasPatel:实际上,问题是不同的。您链接的那个提供了一个不同的定义,而在这种情况下,这是一个相同的定义。
-
@JAB:一切都不同。如果它们不同,则您违反了 ODR(一个定义规则);而如果它们相同,那没关系(这就是
#include的含义)。 -
@MatthieuM。哦,看来你是对的。我很抱歉。
标签: c++ class definition