私有静态数据成员+模板类

时间:2016-06-21 19:24:39

标签: c++ oop static-members template-classes

我有这段代码:

在a.h文件中:

#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。

0 个答案:

没有答案