我能想出的最小例子:
headertest.hpp:
struct Point
{
int y;
};
结构测试.cpp:
#include "headertest.hpp"
class myClass
{
public:
private:
struct Point
{
double x;
};
Point myPoint;
};
在我的机器上(适用于 MinGW 的 GCC 9.2.0),它编译得非常好,没有任何提示。我可以删除类中的 header 或定义,只要至少存在一个,它就会起作用。
这两个不同的结构可以有完全相同的成员,也可以有完全不同的成员,这似乎并不重要。
为什么这似乎有效?它只会在运行时被捕获,还是我错过了一些非常重要的东西?
最佳答案
hpp 文件中的结构在全局范围内,而 cpp 文件中的结构仅存在于 myClass 范围内 (myClass::Point
)。
如果您在 myClass 范围内实例化 Point
类型的变量,将使用本地定义。这个问题类似于variable shadowing , 除了我们在这里处理类型名称而不是变量名称。
关于c++ - 为什么这不违反单一定义规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403056/