【问题标题】:circular class dependency within template member模板成员内的循环类依赖
【发布时间】:2015-04-08 15:58:06
【问题描述】:
#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 文件中,因为它是一个模板函数。那么,如何解决呢?

【问题讨论】:

  • 我在ClassB 头文件中看不到您需要#include "ClassA.h" 的理由。将其移至您的 cpp 文件并试一试?

标签: c++ templates declaration circular-dependency


【解决方案1】:

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

【讨论】:

  • 去掉你提到的include并在ClassB的.cpp文件中添加#include "Configuration.h",就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多