C++ 是外部类声明用法C++;符合标准?

C++ 是外部类声明用法C++;符合标准?,c++,extern,C++,Extern,如果省略extern类const\u迭代器,它就不会编译声明。 这是符合C++ 17标准的吗? 内部类能否访问另一个内部类的私有成员 是Excel类声明使用C++标准兼容?< /P> 不,这不符合标准。类不能有存储类说明符 内部类能否访问另一个内部类的私有成员 与任何其他类别相同;它可以访问公共成员。该示例访问类外的私有成员,因此它的格式不正确 如果省略外部类const_迭代器,它就不会编译;声明 请改用常规转发声明: class My_Container { /*...*/ c

如果省略
extern类const\u迭代器,它就不会编译声明。
这是符合C++ 17标准的吗?
内部类能否访问另一个内部类的私有成员

是Excel类声明使用C++标准兼容?< /P> 不,这不符合标准。类不能有存储类说明符

内部类能否访问另一个内部类的私有成员

与任何其他类别相同;它可以访问公共成员。该示例访问类外的私有成员,因此它的格式不正确

如果省略外部类const_迭代器,它就不会编译;声明

请改用常规转发声明:

class My_Container
{
    /*...*/
    class iterator
    {
        extern class const_iterator;
        Node* _ptr;
    public:
        bool operator==(const iterator& other) {return _ptr == other._ptr;}
        bool operator==(const const_iterator& other) {return _ptr == other._ptr;}
    };
    class const_iterator
    {
        Node* _ptr;
    public:
        bool operator==(const const_iterator& other) {return _ptr == other._ptr;}
        bool operator==(const iterator& other) {return _ptr == other._ptr;}
    };
}

我建议用另一种方法解决这个问题:首先定义
const\u迭代器。使
迭代器
隐式转换为
常量迭代器
。使
常量迭代器
仅与
常量迭代器
相比较

它不使用
外部类常量迭代器
进行编译,但是如果您(1)在
迭代器
的定义(在类范围内)之前声明
常量迭代器
,并且(2)使
常量迭代器
公开
,(3)删除
extern class const_iterator
,然后它就会删除。请添加编译错误使用前向声明,将依赖于确切定义的成员定义到单独的.cpp文件中,除非您的容器是一个模板。我按照您所说的做了,它可以工作,但您的解决方案也可以访问另一个类的私有成员:
iterator(const const_iterator&other):_ptr(other._ptr){}
@Alexv提供一个接受指针的公共构造函数,并作为调用该构造函数的运算符实现转换。或者使用友元delaration。
class const_iterator;
class iterator
{
   // ...
};
class const_iterator
{
   // ...
};