gpt4 book ai didi

c++ - 在类(class)开始与结束时声明枚举

转载 作者:行者123 更新时间:2023-11-28 02:01:51 25 4
gpt4 key购买 nike

下面举两个例子:

struct Coord
{
private:
enum class Origin
{
Top_Left = 0,
Center
};
public:
Coord(Origin origin = Origin::Top_Left)
{}
};


int main()
{
}

在上面运行这个,我没有得到任何错误。另一方面,当我运行它时,出现以下错误。

struct Coord
{
public:
Coord(Origin origin = Origin::Top_Left)
{}
private:
enum class Origin
{
Top_Left = 0,
Center
};
};


int main()
{
}

7:16: error: expected ')' before 'origin'

此外,在 Visual Studio 2015 中,我收到在构造函数中找不到标识符 Origin 的错误。

这是为什么?

此处错误: Live Example

最佳答案

在您的第二个示例中,您在声明枚举之前使用它。您需要在首次使用之前声明它(在构造函数中)或在首次使用之前添加前向声明(这里不打算飞行,但在其他场景中会)。

编译器需要知道 OriginOrigin::Top_LeftCoord(Origin origin = Origin::Top_Left) 中使用之前是什么>。记住;编译器从上到下解析您的代码。在使用它们之前,它需要知道是什么类型。它以整体的方式查看整个编译单元。该语言就是这样工作的——“在使用东西之前必须知道什么东西是什么,我从每个文件的自上而下阅读”。有时“知道的东西”需要是完整的定义,有时前向声明就足够了(详细信息超出了这个问题的范围)。

关于c++ - 在类(class)开始与结束时声明枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com