为什么这不违反一定义规则?

时间:2019-10-15 21:46:11

标签: c++ struct

我可以提出的最小示例:

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)上,此编译过程完美无误。我可以删除类中的标题或定义,只要至少存在一个,它就可以工作。

两个不同的结构可以具有全部相同的成员,也可以具有完全不同的成员,这似乎无关紧要。

为什么这似乎有效?只会在运行时发现它,还是我错过了非常重要的事情?

1 个答案:

答案 0 :(得分:2)

hpp文件中的结构位于全局范围内,而cpp文件中的结构仅位于myClass范围内(myClass::Point)。

如果在myClass范围内实例化类型为Point的变量,则将使用本地定义。这个问题类似于variable shadowing,除了我们在这里处理类型名称而不是变量名称。