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. APP 后台学习笔记

    1.APP后台功能: 远程存储数据.消息中转 2.架构是业务驱动,可能随着开发进程而变化,没有最完美架构 3.架构不要满足追求技术新奇酷炫,而是结合具体业务使用合适的技术,否则会给运维带来很多不必要的 ...

  2. windows下网络编程TCP

    转载 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW): 基于TCP的socket编程 服务器端编程的步骤 ...

  3. [BZOJ4318] OSU!

    比较简单,每个键分两种情况计算期望. 然而要注意的是,期望是线性运算,期望的平方不是平方的期望 . #include <cmath> #include <queue> #inc ...

  4. java eclipse中使用wsdl生成soap 的客户端代码

    项目右键--> new --> other finish完成

  5. 神奇的 UNICODE 字符 : U+202E

  6. 教你如何绘制数学函数图像——numpy和matplotlib的简单应用

    numpy和matplotlib的简单应用 一.numpy库 1.什么是numpy NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表 ...

  7. Tree POJ - 1741【树分治】【一句话说清思路】

    因为该博客的两位作者瞎几把乱吹(" ̄︶ ̄)人( ̄︶ ̄")用彼此的智慧总结出了两条全新的定理(高度复杂度定理.特异根特异树定理),转载请务必说明出处.(逃 Pass:anuonei, ...

  8. fatal error: Eigen3/Core: 没有那个文件或目录

    解决方法: 在CMakeLists.txt文件里添加: include_directories("/usr/include/eigen3")

  9. 解析中国天气网页面获取七日天气 (Java, Python)

    说明 解析中国天气网的页面,获取七日天气. 使用 htmlparser .这是它的 API 文档. 代码 SevenDayWeather.java import java.io.BufferedRea ...

  10. 从输入URL到浏览器显示页面发生了什么

    1.输入网址 当你开始输入网址比如www.cnblogs.com时游览器就可以在书签或者历史记录里面去搜索相关的网址推荐给你. 2.游览器查找域名的IP地址 ① 请求发起后,游览器首先会解析这个域名, ...