我仍然在努力学习C++,现在产生了一个循环依赖关系,根据C2039: Class is not a member of Namespace的说法,这可能是导致我的问题的原因--我得到了一个C2039错误。谁能帮我切这个圆圈吗?
我有两个模板类,模板类tXmlGeometry<Part>有一个成员函数,它将声明模板类tXmlStraightLine的一个实例。两者都在名称空间nXml中,但编译器抱怨tXmlStraightLine不是nXml的成员。我不得不说,我将tXmlGetimey.h绑定到tXmlStraightLine头中,但是当我试图同时将tXmlStraightLine.h绑定到tXmlGeometry头时,会得到一个错误。我还尝试将#include nXml/tXml几何学从tXmlStraightLine头中删除,但没有效果。
下面是命名空间nXml中的nXml模板类的简化代码:
namespace nXml
{
template<class Part>
class tXmlGeometry : public tXmlNode<Part>
{
public:
tXmlGeometry(Part* part);
~tXmlGeometry();
void AddStraightLine2D(const pugi::xml_node& node) {};
};
}
;以及导致此问题的AddStraightLine2D方法的实现:
template<class Part>
inline void nXml::tXmlGeometry<Part>::AddStraightLine2D(const pugi::xml_node& this_node)
{
nXml::tXmlStraightLine<Part> straightline_xml(this);
//do more stuff
}下面是tXmlStraightLine模板类的简化代码:
namespace nXml
{
template<class Part>
class tXmlStraightLine : public tXmlSegment2D<Part>
{
public:
tXmlStraightLine(tXmlGeometry<Part>* geo, const int npos);
~tXmlStraightLine();
}
;
}
;有人能告诉我如何避免循环依赖吗?
编辑:我更正了成员函数命名中的一个错误。
发布于 2021-05-12 12:09:36
因为它们都是模板类,所以我会考虑将它们放在同一个标题中。为了避免依赖问题,可以将声明和定义分开。就像这样:
namespace nXml
{
// tXmlGeometry<Part> declaration
template<class Part>
class tXmlGeometry : public tXmlNode<Part>
{
public:
tXmlGeometry(Part* part);
~tXmlGeometry();
inline void AddStraightLine2D(const pugi::xml_node& this_node);
};
// tXmlStraightLine declaration
template<class Part>
class tXmlStraightLine : public tXmlSegment2D<Part>
{
public:
tXmlStraightLine(tXmlGeometry<Part>* geo, const int npos);
~tXmlStraightLine();
};
// tXmlGeometry<Part> definitions
template<class Part>
inline void nXml::tXmlGeometry<Part>::AddStraightLine2D(const pugi::xml_node& this_node)
{
nXml::tXmlStraightLine<Part> straightline_xml(this);
//do more stuff
}
}
;https://stackoverflow.com/questions/67502381
复制相似问题