为什么我不能在头文件中单独写入名称空间的层次结构?

安德烈·布什曼

我写了一些头文件。我想分别声明名称空间层次结构(为清楚起见),然后声明函数和类。对我来说,它看起来像是文档中的目录。对我而言,这将非常方便:在一处看到名称空间的完整层次结构。我这样写:

// 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的限制吗?

PS我的附加问题在这里

谢谢你。

詹姆斯·坎泽

限制在第9/1节中:“如果类头名称包含嵌套名称说明符,则该类说明符应引用先前直接在该嵌套名称所指向的类或名称空间中声明的类-specifier引用[...]”。换句话说,类别名称的首次出现不能以形式出现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);
};

根据标头的组织方式,从人的角度来看,这甚至可能更好:标头以某种定义的索引开始。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能在头文件中定义全局函数?

为什么我不能在C ++中映射结构?

Firebase实时数据库:为什么我不能在同一目录层次结构中导入多个JSON文件?

为什么不能在公共头文件中初始化静态类成员?

为什么不能在Visual Studio中禁用预编译头文件?

为什么我不能在Ubuntu中打开txt文件?

为什么我不能在名称空间中使用CURL?

为什么我们不能在声明结构变量名称时使用连字符?

为什么我不能在单独的html和js文件中使用全局变量?

为什么我不能将此运算符重载放在与结构相同的名称空间中?

为什么我不能将头文件导入一个头文件中的库中?

为什么只能在头文件中实现模板?

为什么我不能在Java Web套接字应用程序中写入PrintWriter?

为什么我不能在VueJS / Vuex中调用命名空间的getter?

为什么我们不能在C#中的结构中定义数组

为什么不能在单独的过程中更改目录?

为什么即使使用#ifndef HEADER_H也不能在头文件中声明和分配全局变量

CGo为什么无法识别我在头文件中声明的结构?

为什么我不能在结构中初始化char数组

为什么我不能在C中检查结构的大小?(未声明的错误)

为什么我不能在golang中追加属于结构的属性的切片?

为什么我不能在同一结构中存储值和对该值的引用?

单独的头文件中的C ++结构原型

为什么我不能在Swift 3中打印枚举的案例名称?

为什么我不能在带有“名称”的表中访问lua函数

为什么C ++需要单独的头文件?

为什么不能在Windows中更改打开文件的名称?

为什么我不能在 Pycharm 上运行我的文件?

为什么不能在结构定义中忽略寿命?