64,636
社区成员
发帖
与我相关
我的任务
分享
//file01.h
namespace A01{
class Aa {...}; //类Aa在这里定义
}
---------
//file02.h
namespace A01{
class Aa; //前向声明A01中的类Aa;
}
/*
*请问,这里的前向声明,这样写有什么问题?
*还有没有其它更合适的写法?
*为什么 class A01::Aa; 这样作为前向声明,是不行的?
*/
namespace B01{
class Bb {
...
A01::Aa * ptrAa; //使用类Aa的指针
...
};
}
#if !defined HEAD1_H
#define HEAD1_H
namespace A
{
class T
{
public:
T(int);
int n;
};
}
head1.cpp
[code=C/C++]#include "head1.h"
using namespace A; //完全释放出来head1.h里的namespace A
T::T(int _n):n(_n)
{
}
#if !defined HEAD2_H
#define HEAD2_H
namespace A
{
class T;
int useT(const T &);
}
#endif
#include "head2.h"
#include "head1.h"
using namespace A; //最初只想完全释放出head2.h里的namespace A,后来需要T类定义,所以这一下两个都释放出来了
int /*看到我犯贱的全局作用域么? */::useT(const T &obj)
{
/*
我要返回T里的成员变量,所以必须见到T的类定义,所以马上包含进来head1.h
*/
return obj.n;
}
#include <iostream>
#include "head1.h" //为了用类T
#include "head2.h" //为了用函数userT
using namespace std;
int main()
{
A::T a(2); //我只用到了头文件head1
cout<<A::useT(a)<<endl; //我只用头文件head2,至于head1.h会前置声明类T,head1.cpp会包含head2.h我就不关心了,都已经一步一步依赖好了
return 0;
}