If only member function clear of WindowMgr is a friend of Screen, there are some points need to note. Sequence is important.

  • First, define the WindowMgr class in WindowMgr.h, which declares, but cannot define clear function. Screen must be declared before clear can use the members of Screen.
  • Next, define class Screen in Screen. h, including a friend declaration for clear.
  • Finally, define clear in WindowMgr.cpp, which can now refer to the members in Screen.

    When trying to separate class WindowMgr and class Screen in different files for a better decoupling, placed "#include 'Screen.h" statement in front of class WindowMgr`s declare will cause that the friend declaration for clear in Screen.h can't find the corresponding function, because when declaring class Screen surrounding scope can't see the declaration of WindowMgr.

    So the resolution is placing "#include Screen.h" statement in bottom of class WindowMgr s declaration and forward declaration class Screen for WindowMgr.h, or declare a friend for class WindowMgr.

如果 WindowMgr 的成员函数 clearScreen 的友元函数,则需要注意一些要点。顺序很重要。

  • 首先,在WindowMgr.h中定义 WindowMgr 类,只是进行类声明,但不能定义clear函数。必须在clear之前声明 Screen 才能使用 Screen 的成员。
  • 接下来,在Screen中定义class Screen . h,包括 clear 的朋友声明。
  • 最后,在WindowMgr.cpp中定义 clear,它现在可以引用 Screen 中的成员。

    当试图在不同的文件中分离类 WindowMgr 和类 Screen 以获得更好的解耦效果时,在类 WindowMgr 的声明前面放置 "#include 'Screen.h" 语句将导致在Screen.h中声明的友元不能找到相应的函数,因为在声明类 Screen 时,周围的作用域无法看到 WindowMgr 的声明。

    因此,解决方案是将“#include Screen.h”语句放在类 WindowMgr 的声明的底部,并且在WindowMgr.h中前向声明类 Screen 。或者直接为类 WindowMgr 声明一个友元类 Screen

About The Order of The Declarations And Definition When Making a Member Function a Friend.关于使类成员成为另一个类友元函数的声明顺序和定义。的更多相关文章

  1. Method Resolution Order – Python类的方法解析顺序

    在支持多重继承的编程语言中,查找方法具体来自那个类时的基类搜索顺序通常被称为方法解析顺序(Method Resolution Order),简称MRO.(Python中查找其它属性也遵循同一规则.)对 ...

  2. Lua语言中文手册 转载自网络

    Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ...

  3. 精心收集java基础106条

    Java基础 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 一个Java源文件中可以定义多个类,但最多只能定义一个public的类,并且public ...

  4. Sqlite3中存储类型和数据类型结合文档解析。

    sqlite3是个很小的数据库,运行在手机,机顶盒上....那它就不可能像musql,sqlserver那么规范,有很多的数据类型,之前我也以为它定义了很多数据类型,其实不是他就5个存储类,那么多数据 ...

  5. Java编程思想读书笔记

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. (C++) 基本面试题(整理)

    1.new.delete.malloc.free关系 new/delete是C++的运算符.new 调用构造函数用于动态申请内存,delete调用对象的析构函数,用于释放内存. malloc与free ...

  7. [转]使用CSS3 Grid布局实现内容优先

    使用CSS3 Grid布局实现内容优先  http://www.w3cplus.com/css3/css3-grid-layout-module.html 本文由大漠根据Rachel Andrew的& ...

  8. C++转义字符 & keyword

    转义字符: 换行符 \n   水平制表符\t 纵向制表符 \v 退格符 \b 回车符 \r   进纸符 \f 报警(响铃)符 \a 反斜线 \\ 疑问号 \? 单引號 \' 双引號 \"   ...

  9. Java中调用参数是数组的存储过程

    Java中调用参数是数组的存储过程 1. 存储过程以及类型定义如下: --The array in oracle CREATE OR REPLACE TYPE idArray AS TABLE OF ...

随机推荐

  1. windows下的vimrc

    很奇怪的事...不会解释 建议编译位置第一次设置为 map <F9> :call CR()<CR>func! CR()exec "w"exec " ...

  2. ELK-filebeat收集日志到Kafka,并转存ES

    https://blog.51cto.com/tryingstuff/2052271 场景需求 在有些不需要安装java环境的服务器如Nginx,php等为主的web 应用可以使用filebeat来对 ...

  3. application对象的应用案例

    application对象由多个客户端用户共享,它的应用范围是所有的客户,服务器启动后,新建一个application对象,该对象一旦建立,就一直保持到服务器关闭.当有客户访问服务器上的一个JSP页面 ...

  4. DTW和DBA

    DTW(动态时间调整) 动态时间调整算法是大多用于检测两条语音的相似程度,由于每次发言,每个字母发音的长短不同,会导致两条语音不会完全的吻合,动态时间调整算法,会对语音进行拉伸或者压缩,使得它们竟可能 ...

  5. Java虚拟机—垃圾收集器(整理版)

    1.概述 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很 ...

  6. 081、Weave Scope 多主机监控(2019-04-29 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7674011.html   Weave Scope 除了监控容器,还可以监控Docker Host.   点击顶部 HOS ...

  7. 隧道6in4 和隧道6to4(GNS3)

    隧道6in4实验配置 拓扑图 Device Interface IP Address(IPv6) R1 F 0/0 10.1.81.1 F 0/1 2001:db8:cafe:81::10 R2 F ...

  8. docker安装elasticsearch

    docker search elasticsearch 选择一个版本,拉取镜像 docker pull elasticsearch: 查看镜像 docker images 通过镜像,启动一个容器,并将 ...

  9. linux 查看/修改jdk版本

    linux 查看/修改jdk版本 配置环境变量vim /etc/profile 编辑profile文件 在底部加入JAVA_HOME=/usr/java/jdk1.8PATH=$JAVA_HOME/b ...

  10. SQLServer如果查询表相关的视图以及存储过程

    最近在维护一个电商平台,需要对订单表增加字段,但是在review代码的时候发现这个平台的代码写的很有提升价值,且大量的使用了识图和存储过程,所以也给刚接触这个平台的萌新,也就是瓦,造成了不小的困扰,毕 ...