名字空间问题:如何进行类的声明

levinjoe 2004-10-30 08:26:28
如何进行类的声明?
现在,由于担心名字冲突,不得不将内部模块的类封装到一个名字空间中去,但是遇到类的声明问题;
考虑如下情况:
没有用名字空间封装以前:
A.h

class B;
class A
{
...
A *m_xxx;
}

B.h
class B
{
}

添加名字空间以后:
我想变成这样:
A.h

namespace Inter
{
class A
{
...
};
}

B.h
namespace Inter
{
class B
{
...
};
}

现在遇到的问题是:
在A.h 中无法声明class B;

即,无法用 class B; 或class Inter::B;来声明。

请问有什么解决方法?
不考虑直接将B.h 加进去的方法,因为这样虽然能解决,但会导致编译时间过长。我机子慢,不想改一个文件就要重新编译一大堆文件。
...全文
220 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
levinjoe 2004-10-31
  • 打赏
  • 举报
回复
呵呵,我开始是认为inter::就可以了,后来一想这样又与类成员冲突,于是就想到了系统会这样!

c++prime里面就是变量声明这一部分理解不是很深!以后还要多多从设计者角度思考!
lynnboy 2004-10-30
  • 打赏
  • 举报
回复
楼上的正确。
你总该知道B或C在那个namespace里吧
levinjoe 2004-10-30
  • 打赏
  • 举报
回复
呵呵,还是要动手自己测试才行,在做好的系统上测试是在关联错误太多了!
测试结果:
A,B 同一名字空间:
1> 系统自动选Inter::B;
2> 全局的, 要将类声明放到外面;
3> 引用其它名字空间
格式:
namespace InterC
{
class B;
}

namespace Inter
{
class A
{
public:
A();
~A();

private:
InterC::B *m_B;
};
}

呵呵,学了这么久的c++,发现还是没有真正掌握其编译器的实现精华!受类声明影响太大了。
levinjoe 2004-10-30
  • 打赏
  • 举报
回复
看来我没说清楚,首先,由于是用于现有工程,移动头文件是肯定不行了,因为本来目的就是为了减少编译依赖;
如果A,B都是同一个namespace是没问题的,但我不明白系统如何知道这是Inter::B,还是外部全局B;
考虑如下情况,c.h 中定义了一个全局类,A.cpp中同时加上了上面两个类,这时如何区分?
在类的实现中加上Inter::B? (用using namespace Inter肯定会冲突).

所以我在想,有没有办法直接声明class Inter::B?

xuzheng318 2004-10-30
  • 打赏
  • 举报
回复
B类的成员
greenteanet 2004-10-30
  • 打赏
  • 举报
回复
把B.h
namespace Inter
{
class B
{
...
};
}
放到A.h

namespace Inter
{
class A
{
...
};
}
里面可以吧。
freefalcon 2004-10-30
  • 打赏
  • 举报
回复
为何不行?

把声明也放在名字空间中

A.h

namespace Inter
{
class B; // <<<<<
class A
{
...
};
}
levinjoe 2004-10-30
  • 打赏
  • 举报
回复
sorry ,上面应该是B *m_xxx;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧