Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板成员内的循环类依赖关系_C++_Templates_Declaration_Circular Dependency - Fatal编程技术网

C++ 模板成员内的循环类依赖关系

C++ 模板成员内的循环类依赖关系,c++,templates,declaration,circular-dependency,C++,Templates,Declaration,Circular Dependency,- - \ifndef CLASSA #定义类别A #包括“B.h类” 名称空间名称{ 甲级 { 公众: 样板 T myFunc(常量std::string&) { 自动tmp=ClassB::conn(); } }; } #恩迪夫 调用ClassB::conn()会产生一个编译器错误,表示未声明类ClassB。当我转发声明它时,我会收到一条关于不完整类型的错误消息 无法将模板函数移动到.cpp文件中,因为它是一个模板函数。那么,如何解决这个问题呢?只需从classB的标题中删除#包括“Cla

-

-

\ifndef CLASSA
#定义类别A
#包括“B.h类”
名称空间名称{
甲级
{
公众:
样板
T myFunc(常量std::string&)
{
自动tmp=ClassB::conn();
}
};
}
#恩迪夫
调用ClassB::conn()会产生一个编译器错误,表示未声明类ClassB。当我转发声明它时,我会收到一条关于不完整类型的错误消息


无法将模板函数移动到.cpp文件中,因为它是一个模板函数。那么,如何解决这个问题呢?

只需从class
B
的标题中删除
#包括“ClassA.h”
,它就可以工作了。但是您的代码似乎存在多个编译问题,所以很难说(缺少函数
getHandle
,缺少
it()
,缺少类型
Handle
等等)。

我看不出您需要
的理由,在
ClassB
头文件中包含“ClassA.h”
。将其移动到您的cpp文件并试一试?删除您提到的include并在ClassB的.cpp文件中添加一个
#include“Configuration.h”
,这样做很有效。
#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