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
{
// ...
};