我有这段代码:
#ifndef A_H_
#define A_H_
class Class_Hierarchy{
public:
std::map<const Type*, std::set<const Type*>> map;
Class_Hierarchy(){
std::map<const Type*, std::set<const Type*>> map;
}
};
template<class T>
class BASE_Polymorphic {
friend T; //only the actual type can register this class at the CASTS data structure.
private:
void Register_Inheritence(const Type *base);
public:
virtual ~OOP_Polymorphic() {}
static const Type *Get_Type();
virtual const Type *My_Type();
};
class CASTS{
private:
static Class_Hierarchy classHierarchy;
public:
static void Register_Inheritence(const Type *derived, const Type *base);
template<typename Dst, typename Src>
static Dst new_static_cast(Src src);
template<typename Dst, typename Src>
static Dst new_dynamic_cast(Src src);
};
#include "a.cpp"
#endif /* A_H_ */
并在a.cpp文件中:
#ifndef A_CPP_
#define A_CPP_
#include "hw5.h"
#include <type_traits>
#include <typeinfo>
inline void CASTS::Register_Inheritence(const Type *derived, const Type *base) {
std::map<const Type*, std::set<const Type*> >::iterator it;
it = CASTS::classHierarchy.map.find(derived);
}
#endif /* A_CPP_ */
我有另一个名为test.cpp
的文件#includes a.h
并使用了它的代码。
起初我在CASTS中将map
作为静态私有数据成员并在a.cpp
进行了初始化,但是我对BASE_Polymorphic成员函数有未定义的引用,所以我包含了{{ 1}} a.cpp
。
然后我遇到了另一个问题,我无法在cpp文件中初始化map(CASTS类的私有静态数据成员),因为我开始获取a.h
。因此,我尝试将multiple definition error
作为公共数据成员进行制作,并在Class_Hierarchy
类中创建Class_Hierarchy
的静态实例以使用其地图,但我得到{{1 }}
我无法想到这两个问题的解决方案,如何将模板类保留在头文件中并在CASTS类中拥有静态成员?
现在我唯一的错误是CASTS
CASTS :: classHierarchy&#39;`。
编辑:
我的每个成员函数都有多个定义错误,因此我在undefined reference to CASTS::classHierarchy
文件中添加了#include guards。