namespace命名空间成员类的声明
这其实是QT空项目的架构!!
[user:test] ls
class.h main.cpp pub.cpp pub.h
[user:test] cat class.h
/// @file class.h
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-05-21
#include <stdio.h>
class pub
{
public:
pub()
{
printf("pub\n");
}
};
namespace UI
{
class myClass : public pub {}; //花括号不可少,否则报以下错误:
//class.h:20:11: error: forward declaration of ‘class UI::myClass’
}
[user:test] cat pub.h
// @file pub.h
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-05-21
namespace UI
{
class myClass; //命名空间成员(myClass)声明。这样class.h就可以不用编译进来了。
//好处在于:如果class.h经常要修改。pub.h就基本不用变了。
//这里的UI::myClass 和 下面的class myClass是两个不一样的类,
//他们在内存中的存放的位置是两个地方,一个在命名空间里,另一个
//在全局空间里。
}
class myClass
{
public:
myClass();
UI::myClass * ui;
};
[user:test] cat pub.cpp
/// @file pub.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-05-21
#include <stdio.h>
#include "pub.h"
#include "class.h"
myClass::myClass()
{
ui = new UI::myClass;
printf("myClass\n");
}
[user:test] cat main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-05-21
#include <stdio.h>
#include "pub.h"
int main()
{
myClass my;
return 0;
}
编译运行:
[user:test] g++ -c pub.cpp
[user:test] g++ main.cpp pub.o
[user:test] ls
a.out* class.h main.cpp pub.cpp pub.h pub.o
[user:test] ./a.out
pub
myClass
[user:test]