我可以提出的最小示例:
headertest.hpp:
struct Point
{
int y;
};
structtest.cpp:
#include "headertest.hpp"
class myClass
{
public:
private:
struct Point
{
double x;
};
Point myPoint;
};
在我的机器(用于MinGW的GCC 9.2.0)上,此编译过程完美无误。我可以删除类中的标题或定义,只要至少存在一个,它就可以工作。
两个不同的结构可以具有全部相同的成员,也可以具有完全不同的成员,这似乎无关紧要。
为什么这似乎有效?只会在运行时发现它,还是我错过了非常重要的事情?
答案 0 :(得分:2)
hpp文件中的结构位于全局范围内,而cpp文件中的结构仅位于myClass范围内(myClass::Point
)。
如果在myClass范围内实例化类型为Point
的变量,则将使用本地定义。这个问题类似于variable shadowing,除了我们在这里处理类型名称而不是变量名称。