C++ 的一个友员错误 联想
来源:互联网 发布:新浪微博可以绑定域名 编辑:程序博客网 时间:2024/05/01 01:01
C++的友员,应该都是知道一点,但就是很能深入。
今天我在DevC++上发现各问题。
程序如下
#include <iostream>
namespace C
{
class D{};
void f()
{
std::cout<<"Hello";
}
}
namespace B
{
using C::f; //使用using 声明时出错,用using namespace C;就不会??
class A
{
friend void f();
};
}
int main()
{
C::f();
system("pause");
}
当我用using C::f;时程序出错,提示为:
15 D:/Coder/Dev-Cpp/Project/Test1/main.cpp `void B::f()' conflicts with previous using declaration `void C::f()'
说 B::f()和 C::f()冲突。。。
按我的想法是, 在class A中的friend void f();声明,可以是 namespace B中的 void f()的第一次声明。这个声明的效果就相当于在class A的前面有个 void f()声明一样。
这样一来,using C::f;带来了二次声明的冲突。
当使用 using namespace C;时因为 C::f被引入到 f查找的全局名字空间中了,所以namespace B中的 class A前面那个隐式的 void f();声明屏蔽掉了外面的。
这里隐含的错误没有被触发,所以程序运行正确(B::f()其实不存在) 。
从这个例子中,我个人总结为:
friend声明是个 自由声明(非受限声明)时,其实是在class的前面插个声明,也就是说
friend的自由声明 引用 是 class所在名字空间的 成员。
今天我在DevC++上发现各问题。
程序如下
#include <iostream>
namespace C
{
class D{};
void f()
{
std::cout<<"Hello";
}
}
namespace B
{
using C::f; //使用using 声明时出错,用using namespace C;就不会??
class A
{
friend void f();
};
}
int main()
{
C::f();
system("pause");
}
当我用using C::f;时程序出错,提示为:
15 D:/Coder/Dev-Cpp/Project/Test1/main.cpp `void B::f()' conflicts with previous using declaration `void C::f()'
说 B::f()和 C::f()冲突。。。
按我的想法是, 在class A中的friend void f();声明,可以是 namespace B中的 void f()的第一次声明。这个声明的效果就相当于在class A的前面有个 void f()声明一样。
这样一来,using C::f;带来了二次声明的冲突。
当使用 using namespace C;时因为 C::f被引入到 f查找的全局名字空间中了,所以namespace B中的 class A前面那个隐式的 void f();声明屏蔽掉了外面的。
这里隐含的错误没有被触发,所以程序运行正确(B::f()其实不存在) 。
从这个例子中,我个人总结为:
friend声明是个 自由声明(非受限声明)时,其实是在class的前面插个声明,也就是说
friend的自由声明 引用 是 class所在名字空间的 成员。
- C++ 的一个友员错误 联想
- 关于友员函数的低级错误
- 关于友员函数的低级错误
- 关于友员函数的低级错误
- 一个快递员的电话
- 外贸员不要犯的错误
- 蛮有趣的一个检票员
- (转)一个老成员的心声
- 一个测试员的工作与学习
- 做一个专业的软件测试员
- 需要一个blackberry的开发员
- (C++)一个愚蠢的错误
- C++ 将一个 Template Class 作为另一个类的友员
- 关于一个小问题的联想
- 一个ajax做的联想查询文本框
- 网管员牢记 10种较为常见的服务器管理错误
- 联想功能字符串的提取(c)
- 友员
- fc3下安装mplayer
- Direct3D 10最新消息
- IBM小型机维护录像
- JAVA程序设计 第一章绪论
- Linux声音设备编程实例
- C++ 的一个友员错误 联想
- 页面后退的问题---在线急等
- JAVA程序设计 第二章结构化程序设计
- 编程注意-日志篇
- PHP
- DELPHI组件安装全攻略
- 几个小知识点
- 最近在开发的一个项目FlashIM
- 处理取消IRP