模板成员中的循环类依赖项

circular class dependency within template member

本文关键字:循环类 依赖 成员      更新时间:2023-10-16
#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文件,因为它是一个模板函数。那么,如何解决这个问题呢?

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