gpt4 book ai didi

c++ - 为什么不能在头文件中单独写命名空间的层级?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:23 25 4
gpt4 key购买 nike

我写了一些头文件。我想单独声明命名空间层次结构(为了清楚起见),然后声明函数和类。对我来说,它看起来像是文档中的目录。这对我来说非常方便:在一个地方查看 namespace 的完整层次结构。我这样写:

// Namespaces hierarchy:
namespace Bushman{
namespace CAD_Calligraphy{}
//...
}

// Declarations of classes and functions
class Bushman::CAD_Calligraphy::Shp_ostream{
public:
explicit Shp_ostream(std::ostream& ost);
};

但是 MS Visual Studio 对这种创建头文件的方式大喊大叫。我应该这样写:

namespace Bushman{
namespace CAD_Calligraphy{
class Shp_istream{
public:
explicit Shp_istream(std::istream& ist);
};
}
}

为什么第一个变体不起作用?这是C++还是IDE的限制?

附言我的附加问题是 here .

谢谢。

最佳答案

限制在 §9/1 中:“如果类头名称包含嵌套名称说明符,类说明符应指先前直接在类中声明的类或嵌套名称说明符所指的 namespace [...]”。在换句话说,类名的第一次出现不能在类似于 Bushman::CAD_Calligraphy::Shp_ostream

您可以做的是在您的初始文件中添加前向声明层次结构声明:

// Namespaces hierarchy:
namespace Bushman{
namespace CAD_Calligraphy{
class Shp_ostream;
//...
}
//...
}

// Declarations of classes and functions
class Bushman::CAD_Calligraphy::Shp_ostream{
public:
explicit Shp_ostream(std::ostream& ost);
};

根据标题的组织方式,这甚至可能是从人的角度来看更好:您的标题以一种其中定义的索引。

关于c++ - 为什么不能在头文件中单独写命名空间的层级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611000/

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