【发布时间】: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