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. MongoDB配置简明文档

    1.下载MongoDB程序包(RHEL 7 Linux 64-bit x64) [root@mongodb /]# wget -P/usr/local/src/ https://fastdl.mong ...

  2. 微信小程序授权登录

    目录 自定义授权页面 点击授权登录后出现微信自带的授权登录弹窗 <!--index.wxml--> <!-- 授权界面 --> <cover-view class='au ...

  3. SQL随记(四)

    1.for loop 循环 格式:for index in lower .. upper loop end loop; for i in 1 .. g_descTbl.count loop if ( ...

  4. MYCP作业

    本次作业主要复习了输入流输出流的内容 作业要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt ...

  5. ArcGIS Editor for Open Street Map 10.X for Desktop下载地址

    ArcGIS Editor for Open Street Map可用于导入从OSM下载的地图,但并不是ArcGIS自带的工具,需要从官网下载,虽然文件很小,但下载速度较慢,易断开. 在此为找不到或不 ...

  6. text-stroke实现文字描边(镂空)、text-fill-color实现文字填充&渐变(+animation实现流光字体)

    text-stroke:<' text-stroke-width '> || <' text-stroke-color '>(text-stroke-width:设置或检索对象 ...

  7. Spring AOP中 pointcut expression表达式解析

    任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...

  8. Arduino—运算符

    赋值运算符: =    +=   -+     *=      /= %=       取余等于 &=    与等于 &=(与等于)对某个变量的值按位进行与运算,例如:G&=x ...

  9. 动态解析xml,并生成excel,然后发邮件。

    直接贴代码了! DECLARE @CurrentServer NVARCHAR(100)DECLARE @CurrentDatabase NVARCHAR(100)DECLARE @CurrentLo ...

  10. 动态将ASPX生成HTML网页并将网页导出PDF

    1.首先要找到wnvhtmlconvert.dll这个文件,并引入项目中. 2.Server.Execute("pos.aspx?id=" + ids); 执行相应的aspx网页 ...