首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

私有枚举访问无法从嵌套类的友元函数进行编译

是一个与C++编程语言相关的问题。

首先,私有枚举是指在类的私有成员中定义的枚举类型。嵌套类是指在一个类的内部定义的另一个类。友元函数是指在类中声明为友元的非成员函数,可以访问该类的私有成员。

在C++中,私有枚举是不能被外部访问的,即使是在友元函数中。这是因为私有成员仅限于在声明它们的类内部访问。

以下是对私有枚举访问无法从嵌套类的友元函数进行编译这个问题的解释:

  1. 私有枚举访问限制:私有枚举是定义在类的私有部分中的,因此只能在类内部访问。私有枚举无法通过类外的函数(包括友元函数)进行访问。这是为了保护类的封装性,防止外部代码直接访问类的私有成员。
  2. 嵌套类和友元函数:嵌套类是一个类在另一个类内部的定义。友元函数是一个在类中声明为友元的非成员函数,可以访问类的私有成员。然而,即使友元函数定义在外部类中,也无法访问嵌套类中的私有枚举。

综上所述,私有枚举无法从嵌套类的友元函数进行编译,是因为私有枚举只能在类内部访问,不可从类外或嵌套类中访问。这是C++语言中的封装特性所决定的。

关于腾讯云相关产品和产品介绍的链接地址,由于要求答案中不能提及特定的云计算品牌商,无法提供相关链接。但是你可以通过搜索腾讯云的官方网站获取相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

嵌套

函数用于扩展接口中,并非只能拥有函数,也可以将作为,该类称为。...所有方法都可以访问原始私有成员和保护成员,但也可以对其做更严格限制,使得特定成员函数成为另一个。...和继承、包含关系 我们为什么要提供这种接口呢,它既然可以外部访问私有部分权限,是不是与我们面向对象编程思想相悖呢?...(注:嵌套结构和枚举嵌套相似,也适用于上表。)...声明位置决定了作用域和可见性。可见后,访问控制规则(公有、私有、保护、)决定程序对嵌套成员访问权限。

72340

C++嵌套与局部类

代码编译运行环境:VS2012+Debug+Win32 ---- 1.嵌套 1.1嵌套定义 在一个体中定义叫作嵌套。拥有嵌套叫外围。...: (1)作用域角度来看,嵌套与外围是两个完全独立,只是主从关系,二者不能相互访问,也不存在关系。...(2)访问权限角度来看,嵌套既可为私有,也可为公有。在上面的例子中,嵌套B访问权限是public,可以在外围成员函数之外使用该嵌套,使用时加上名字限定。...如果将嵌套B访问权限设置为private,那么只能在外围内使用。 (3)嵌套成员函数可以在它体外定义。...(4)嵌套可以访问外围静态成员变量,即使它访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问

1.2K10
  • 【Groovy】编译编程 ( ASTTransformation#visit 方法中访问 Groovy 、方法、字段、属性 | 完整代码示例及进行编译时处理编译过程 )

    文章目录 一、ASTTransformation#visit 方法中访问 Groovy 、方法、字段、属性 二、完整代码示例及进行编译时处理编译过程 1、Groovy 脚本 Groovy.groovy...#visit 方法中访问 Groovy 、方法、字段、属性 ---- 在 ASTTransformation#visit 方法中 , 使用 source.AST 可以获取 Groovy 脚本 AST..., 用于访问 Groovy 每个 ; GroovyClassVisitor 对象中 , 提供了访问 、成员字段 、成员方法 、属性 、 构造函数回调方法 ; 代码示例 : import org.codehaus.groovy.ast.ASTNode..., 并进行遍历 // 在 ModuleNode 中节点封装在了如下成员中 // List classes = new LinkedList visitMethod main visitMethod run visitProperty name visitField name visitMethod hello 二、完整代码示例及进行编译时处理编译过程

    85720

    C++初阶-和对象下

    (初始化列表和函数体赋值)时,对象创建时会先走初始化列表,再走函数体赋值,最后走成员缺省值 四、 分为:函数 概念: 提供了一种突破域封装方式,有时提供了便利(非成员函数能够访问私有成员...: 注:函数可以直接访问私有成员,它是定义在外部普通函数,不属于任何,但需要在内部声明,声明时需要加friend关键字 示例: class Date { friend ostream..._day; return _cin; } 说明: 可以访问私有和保护成员,但不是成员函数 函数不能用const修饰(不是成员函数,没有this指针) 函数可以在定义任何地方声明...,不受访问限定符限制 一个函数可以是多个函数 函数调用与普通函数调用和原理相同 2、 所有成员函数都可以是另一个函数,都可以访问另一个非公有成员。...注意: 关系是单向,不具有交换性 示例:Time和Date,在Time中声明Date为其,那么可以在Date中直接访问Time私有成员变量,但想在Time访问Date私有的成员变量则不行

    36730

    【C++初阶】C++入门

    volatile: a、当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中,以后再取变量值时,就直接寄存器中取值。...19、friend 。使其不受访问权限控制限制。例如,在1个中,私有变量外部是不能直接访问。...可是假如另外1个函数访问本类1个私有变量时,可以把这个函数声明为本类函数。这样他们就可以直接访问本类私有变量。...public为公有的,访问不受限制;protected为保护,只能在本类和访问;private为私有的,只能在本类、派生访问。...left, int right)  {  return left + right;  } } 2.命名空间之间也可以进行嵌套  //2.

    1.3K30

    C++基础知识精髓

    具备封装和信息隐藏特性。只有成员函数才能访问私有成员,程序中其他函数无法访问私有成员。...是一种定义在外部普通函数,但他需要在体内进行说明,为了和该类成员函数加以区别,在说明时前面加以关键字friend。不是成员函数,但是他能够访问私有成员。...包括:函数 关键字:friend函数函数特点是能够访问私有成员非成员函数函数语法上看,他和普通函数相同,即在定义上和调用上和普通函数相同。...所有成员函数都是另一个函数,都可以访问另一个隐藏信息(包括私有成员和保护成员)。 当希望一个可以存取另一个私有成员时,可以将该类声明为另一。...若B是AC是BC不一定是A,同样要看中是否有相应申明 注意事项: 1.可以访问私有成员。

    2K50

    《Effective C++》读书摘要

    二十三、用非成员函数和非函数替换成员函数 封装强度和改变强度成反比,因为只影响有限用户; 访问函数封装性好于累内成员函数封装性,不增加累内私有数据访问函数数量; 二十四、参数需要类型转换应使用非成员函数...(六)、继承与面向对象设计 三十二、确定public继承塑膜出is-a关系 适用于基事情也适用于子类。 三十三、避免遮掩继承来名称 基重载函数一旦在子类被重写后,其他同名函数无法访问。...四十六、类型转换时为模板定义非成员函数 对于模板化要支持双操作运算符重载,首先必须是非成员函数,另外为了能让模板具体化必须将函数定在体内部,因此只能将之声明为类型。...(并非模板函数必须内定义)。 四十七、使用traits 表现类型信息 STL五大迭代器: 1.输入迭代器:向前,一次一步,只读一次,istream_iterator。...现在就可以把doAdvance封装起来自动完成编译期类型判断。 四十八、模板编程 让某些事情变得容易可能,将某些工作运行期转移到编译期; 分支——借由模板特化实现; 循环——借由递归完成; ?

    1.9K60

    运算符重载基本规则和习惯用法是什

    比如输入输出运算符(>),它们左操作数是标准流对象(stream),我们无法对其进行修改。 那么这么多运算符,如何选择是作为成员函数还是非成员函数呢?...如果是二运算符,且会修改其左/右操作数(一般都是左),则实现为成员函数,因为一般你都需要访问私有成员。 当然,也有一些例外。...如果你有一个枚举, enum Month {Jan, Feb, ..., Nov, Dec} 你想为它重载递加和递减运算符,但是你是无法实现它们为成员函数,因为在 C++ 中,枚举类型压根就没有成员函数这一说...还有,对于嵌套模板中模板,operator<() 作为内联成员函数会更方便去读写成员变量,但这种情况不是经常能遇到。 普通运算符重载用法 重载运算符大部分代码都是固定。...如果有getXXX()这一函数,那么设其为非成员函数就没什么问题;如果没有,设置为最佳,这样就可以直接访问私有成员。 || && 用法和上面的一样,但是应用场景很难遇到需要重载这两个

    73610

    【C++】与对象理解和学习(下)

    函数 函数 函数可以 直接访问 私有成员,它是 定义在外部 普通函数,不属于任何,但需要在内部声明,声明时需要加 friend关键字。...也就是说,函数会突破private限制, 使普通函数也可以访问成员变量。...即a是b,b是c,但是这里a不是c 函数可以在定义任何地方声明,不受访问限定符限制 函数不能用const修饰 一个函数可以是多个函数 函数调用与普通函数调用原理相同...就可以实现对该类中私有成员进行正常访问。...(注意事项与函数相同) class Time { friend class Date;// 声明日期为时间,则在日期中就直接访问Time私有成员变量 public:

    48630

    C++之面向对象(下)

    但这样又会导致无法访问成员,此时就需要使用友函数。(operator>>同理)。...函数可以直接访问私有成员,它是定义在外部普通函数,不属于任何,但需要在内部声明,声明时需要加friend关键字。...函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个函数 函数调用与普通函数调用原理相同 3. 1.引入 如果想要在一个访问另一个成员,就需要将这个声明为另一个...所有成员函数都可以是另一个函数,都可以访问另一个非公有成员。...2.说明 关系是单向,不具有交换性; 比如上述Time和Date,在Time中声明Date为其,那么可以在Date中直接访问Time私有成员变量,但想在Time访问

    38540

    C++为什么有参数依赖查找(ADL)?

    局部类查找:如果类是局部(即在函数或代码块内定义),或者嵌套在另一个局部类中,查找会在定义该类代码块范围内进行,直到定义点。...命名空间查找:如果类是命名空间成员,或者嵌套在命名空间成员中,或者是命名空间中函数局部类,查找会在包含该类命名空间作用域内进行。...在查找时,还存在一些特殊规则,以下仅举两例:比如在查找域运算符::左边名字时,会忽略函数、变量、枚举等,只有类型名称会被查找在内部声明函数,其名称查找规则与成员函数相同。...在外部定义函数,其查找规则与命名空间中函数相同。限定名称查找限定名称查找用于处理在作用域解析操作符::右侧出现名称。...查找合并:将普通未限定查找找到声明集合与ADL找到声明集合合并,并应用特殊规则,例如,通过ADL可见关联函数函数模板,即使它们在普通查找中不可见。

    9410

    【C++初阶】—— 和对象 (下)

    但是问题来了,如果我们写成全局函数,又无法使用私有的成员变量,这时作用就凸显出来了!...函数: 可以直接访问私有成员,它是定义在外部普通函数,不属于任何,但需要在内部声明,声明时需要加friend关键字 例如: class Date { // 不声明,将无法调用私有成员...: 函数访问私有和保护成员,但不是成员函数 函数不能用const修饰 函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个函数 函数调用与普通函数调用原理相同... 所有成员函数都可以是另一个函数,都可以访问另一个非公有成员 特征: 关系是单向,不具有交换性 关系不能传递 如果C是B, B是A..._day = day; } private: int good; A _d; }; B能直接访问A私有的成员变量,但是A 不能访问B 中私有的成员变量 讲到,我们再来介绍一下一个跟有很大关系内部类

    6010

    EasyC++84,私有继承(二)

    这是EasyC++系列第84篇,来聊聊私有继承。 私有继承(二) 我们继续来看私有继承。 访问方法 我们知道,在私有继承时,基公有对象以及保护对象会变成派生私有对象。...我们可以在派生方法当中使用它,但无法通过派生对象直接调用,但无法访问私有方法和对象。 这个概念我们很好理解,但具体到实现上,我们如何在派生方法当中调用基公有或者保护方法呢?...访问 方法和对象都好办,但怎么办呢?因为函数并不属于,所以无法通过名或者解析运算符搞定。针对这种情况,我们只能取巧,通过显式地对派生进行类型转换实现。...类型,这样就可以调用基string了。...原因也简单,首先在不使用类型转换情况下,os << stu和自身函数类型匹配, 将会发生递归。其次由于C++支持多继承,所以编译器将会无法确定转换成哪个基类型。

    38310

    C++初阶 和对象(补充)

    一、 1.1什么是是一种用来突破封装手段,使用友可以访问到被封装数据 1.2如何使用友?...比方说,我有一个叫A,它有一个成员为int _a;而这个成员我把它封装到private中了,那么在外面显然是不能够正常访问到_a这个变量,但是我们可以通过访问到,在里面输入这串代码:friend...+需要访问私有成员函数名,之后这个函数便可以在外面访问到A这个私有成员 1.3使用友 正常情况下我们想直接拿到A中_a编译器便直接报错了 可以看出,使用友建立链接之后test便可以直接访问到...A这个_a 1.4使用友注意事项 (1)函数访问私有和保护成员,但不是成员函数 (2)函数不能用const修饰 (3)函数可以在定义任何地方声明,不受访问限定符限制...(4)一个函数可以是多个函数 (5)函数调用与普通函数调用原理相同 二、初始化列表 2.1什么是初始化列表?

    7510

    C++基础(五).多态

    只有成员函数才能访问私有成员,程式中其他函数无法访问私有成员。非成员函数能够访问公有成员,但是假如将数据成员都定义为公有的,这又破坏了隐藏特性。...是一种定义在外部普通函数,但他需要在体内进行说明,为了和该类成员函数加以区别,在说明时前面加以关键字friend。不是成员函数,但是他能够访问私有成员。...作用在于提高程式运行效率,但是,他破坏了封装性和隐藏性,使得非成员函数能够访问私有成员 能够是个函数,该函数被称为函数也能够是个,该类被称为 函数 函数特点是能够访问私有成员非成员函数...函数语法上看,他和普通函数相同,即在定义上和调用上和普通函数相同 除了前面讲过函数以外,还能够是,即一个能够作另一个。...当一个作为另一个时,这就意味着这个任何成员函数都是另一个函数 Tip: 引自 C++中友详解 ---- 代码示例 要求 用友函数实现clock前置、后置单目运算符重载

    65420

    和对象(3)

    静态成员函数属于本身,而非类某个特定对象。非静态成员函数则依赖于特定实例,由于静态成员函数没有this指针,因此它无法访问非静态成员,因为这些非静态成员需要this指针来访问。 2....函数可以直接访问私有成员,它是定义在外部普通函数,不属于任何,但需要在 内部声明,声明时需要加friend关键字。...ostream& operator<<(ostream& _cout, const Date& d); friend istream& operator>>(istream& _cin, Date& d); 函数访问私有和保护成员...,但不是成员函数 函数不能用const修饰 函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个函数 函数调用与普通函数调用原理相同 所有成员函数都可以是另一个函数...比如上述Time和Date,在Time中声明Date为其,那么可以在Date中直接 访问Time私有成员变量,但想在Time访问Date私有的成员变量则不行。

    5610

    【C++】‘与对象‘-三部曲——(3)(13)

    关键字 【待补】 四. 1.函数 函数可以直接访问私有成员,它是定义在外部普通函数,不属于任何,但需要在内部声明,声明时需要加friend关键字 说明: 函数访问私有和保护成员...,但不是成员函数 函数不能用const修饰 函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个函数 函数调用与普通函数调用原理相同 函数声明与函数声明不同...所有成员函数都可以是另一个函数,都可以访问另一个非公有成员。...例:比如下面Time和Date,在Time中声明Date为其,那么可以在Date中直接访问Time 私有成员变量,但想在Time访问Date私有的成员变量则不行。...; // 声明日期为时间 //则在日期中就直接访问Time私有成员变量 public: Time(int hour = 0, int minute = 0, int second

    12510

    和对象:C++11新特性与知识补充

    无法自己构造),必须放在初始化列表进行初始化,否则会造成编译器报错; 成员变量声明位置缺省值(C++11) 缺省值作用 初始化列表就是成员变量定义地方,每个成员都要走初始化列表 没有显式在初始化列表进行定义成员...(四) 在 C++ 编程中提供了一种突破封装机制,允许非成员函数或其他访问私有和保护成员。包括函数函数可以访问私有和保护成员。...函数 定义与作用 函数是一种特殊非成员函数,可以通过函数访问私有和保护成员 在内使用friend关键字声明函数 特点 函数只是声明,所以可以在定义任何地方声明,不受访问限定符限制..._b1 << endl; } int main() { A aa; B bb; func(aa, bb); return 0; } 定义与作用 是一个所有成员函数都可以访问另一个私有和保护成员...()匿名对象作为比较函数,提示sort函数按照顺序(大到小)对元素进行排序。

    8310

    【C++】泛型编程 ⑩ ( 模板运算符重载 - 函数实现 写在外部同一个 cpp 代码中 | 模板 外部函数二次编译问题 )

    ( 模板运算符重载 - 函数声明 和 函数实现 写在同一个中 | 模板 外部函数问题 ) 实现了第一种情况 , 模板 函数声明 与 函数实现 都写在同一个中 , 也就是没有分开进行编码...外部 实现 函数 函数 不是 函数 , 是 外部函数 , 函数 中又用到了 泛型 T , 说明这是一个 模板函数 ; 函数 是 全局函数 , 不属于 模板 , 不要使用 域操作符...访问函数 ; 函数 泛型类型 , 要当做 函数模板 对待 ; 模板函数就涉及到 二次编译 问题 , 下面先分析一下 模板函数 二次编译 导致 模板函数 问题 ; 函数 不要乱用..., 只有在 重载 左移 右移 操作符时 , 才使用 函数 ; ( 1 ) 错误示例及分析 - 模板 外部函数 二次编译 问题 在 模板 内部声明 函数 , template <typename...时 , 只进行 简单 语法分析 , 词法分析 , 生成一个函数头 ; 第二次编译 函数模板 时 , 又生成一个 函数头 ; 这两次编译生成 函数头 不一致 , 导致 无法找到 相应 函数实现 ;

    19710

    【C++航海王:追寻罗杰编程之路】与对象你学会了吗?(下)

    << _day << endl; return _cout; } private: int _year; int _month; int _day; }; 函数可以直接访问私有成员...,但不是成员函数函数不能用const修饰; 函数可以在定义任何地方声明,不受访问限定符限制; 一个函数可以是多个函数函数调用与普通函数调用原理相同。...3.2 -> 所有成员函数都可以是另一个函数,都可以访问另一个非公有成员。...关系是单向,不具有交换性; 比如上述Time和Date,在Time中声明Date为其,那么可以在Date中直接访问Time私有成员变量,但想在Time访问Date私有的成员变量则不行...注意:内部类就是外部类,参见定义,内部类可以通过外部类对象参数来访问外部类中所有成员。但是外部类不是内部类

    6210
    领券