mpstat 发表于 2010-12-20 11:33

有命名空间的类怎么前置

有一个类B, 它在命名空间A里面,我一个头文件要用到B的指针,前置声明
class A::B;

会报错.
这个时候怎么处理??

okocha-jay 发表于 2010-12-20 11:42

namespace A
{
class B;
}

??

mpstat 发表于 2010-12-20 19:02

回复 1# mpstat

bb.h:
namespace AA
{
      class BB
      {
      };
}ss.h:
//#include "bb.h"

class AA::BB;

class CC
{
      AA::BB* bp;
};
ss.cpp:
#include "ss.h"

int main()
{
      CC c;

      return 0;
}g++报错:
In file included from ss.cpp:4:
ss.h:3: 错误:‘AA’未声明
ss.h:7: 错误:‘AA’未声明
ss.h:7: 错误:ISO C++ 不允许声明无类型的‘BB’
ss.h:7: 错误:expected ‘;’ before ‘*’ token

wb112200 发表于 2010-12-20 19:53

回复mpstat

bb.h:ss.h:ss.cpp:g++报错:
In file included from ss.cpp:4:
ss.h:3: 错误:‘AA’未声 ...
mpstat 发表于 2010-12-20 19:02 http://bbs.chinaunix.net/images/common/back.gif


    没看明白... 引用其他命名空间的类 应该用 user namespace ** 吧...

wb112200 发表于 2010-12-20 20:25

经测试
如果你定义的命名空间中的类名和其他命名空间类名不同,不冲突
可以直接引用...

namespace AA

{

      class BB

      {

      };

}

void main()
{
    BB *p;
}

mpstat 发表于 2010-12-20 20:58

回复 5# wb112200 :/users/iscs/rt21/src/test/using>$ cat aa.cpp
namespace AA
{

      class BB

      {

      };

}

int main()
{
    BB *p;
      return 0;
}
:/users/iscs/rt21/src/test/using>$ g++ -o aa aa.cpp
aa.cpp: In function ‘int main()’:
aa.cpp:14: 错误:‘BB’在此作用域中尚未声明
aa.cpp:14: 错误:‘p’在此作用域中尚未声明那这是什么意思??

wb112200 发表于 2010-12-21 09:53

回复 6# mpstat


    就是说 可以直接引用类名啊 不需要指定他属于哪个命名空间的...

wb112200 发表于 2010-12-21 09:54

回复wb112200 那这是什么意思??
mpstat 发表于 2010-12-20 20:58 http://bbs.chinaunix.net/images/common/back.gif


    哦 忘了加声明 ... class BB;
页: [1]
查看完整版本: 有命名空间的类怎么前置