最近在写一个库,分为接口(some_class)与实现(some_class_imp),接口类都在名空间some_lib里面,实现类都在名空间some_lib::some_lib_imp里面,而为了以后的扩展考虑,我先写了一个Windows版本的实现,放在名空间some_lib::some_lib_imp::win_imp里面,然后在some_lib_imp.h里面直接using win_imp::some_class_imp(将win_imp::some_class_imp引入some_class_imp名空间)。接着我在some_class.h里面前置声明了namespace some_lib { namespace some_lib_imp { class some_class_imp; }}},然后,在some_class.cpp里面包含some_lib_imp.h。于是,就出问题了....找不到定义。
类似:
// sclass.h
namespace slib {
namespace slib_imp {
class sclass_imp;
}
class sclass {
slib_imp::sclass_imp* imp_;
};
}
// sclass_imp_win.h
namespace slib { namespace slib_imp { namespace win_imp {
class sclass_imp { ... };
}}}
// sclass_imp.h
#include "sclass_imp_win.h"
namespace slib { namespace slib_imp {
using win_imp::sclass_imp;
// typedef win_imp::sclass_imp会显示重定义
}}
// sclass.cpp
#include "sclass.h"
#include "sclass_imp.h"
此时找不到sclass_imp的定义...
求破....
类似:
// sclass.h
namespace slib {
namespace slib_imp {
class sclass_imp;
}
class sclass {
slib_imp::sclass_imp* imp_;
};
}
// sclass_imp_win.h
namespace slib { namespace slib_imp { namespace win_imp {
class sclass_imp { ... };
}}}
// sclass_imp.h
#include "sclass_imp_win.h"
namespace slib { namespace slib_imp {
using win_imp::sclass_imp;
// typedef win_imp::sclass_imp会显示重定义
}}
// sclass.cpp
#include "sclass.h"
#include "sclass_imp.h"
此时找不到sclass_imp的定义...
求破....