模板成员中的循环类依赖

时间:2015-04-08 15:58:07

标签: c++ templates declaration circular-dependency

#ifndef CLASSB
#define CLASSB

#include "ClassA.h"

namespace name {

class ClassB
{
public:
    static Handle conn();
};

}

#endif

-

#include "ClassB.h"

Handle name::ClassB::conn()
{
    return getHandle(ClassA::it().str());
}

-

#ifndef CLASSA
#define CLASSA

#include "ClassB.h"

namespace name {

class ClassA
{
public:
    template <typename T>
    T myFunc(const std::string&)
    {
        auto tmp = ClassB::conn();
    }
};

}
#endif

调用 ClassB :: conn()会产生编译错误,表示未声明类 ClassB 。当我转发声明它时,我收到一条关于不完整类型的错误消息。

我无法将模板功能移动到我的.cpp文件,因为它是模板功能。那么,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

只需从类#include "ClassA.h"的标题中删除B即可。但是您的代码似乎存在多个编译问题,因此很难说(缺少函数getHandle,缺少it(),缺少类型Handle等)。