如何解决C++、嵌套类、交叉引用
上周,我正在做作业,要求我们实现一个有向图数据结构。我决定将我的图实现为邻接表。在图片下方,您可以看到我的想法。 为了实现这个结构,我创建了两个嵌套结构。 CityListNode 和 RouteListNode。 (在作业中,我们正在为一家航空公司构建一个软件)在这个实现中,顶点被实现为一个链表,顶点之间的每条边也是一个链表。当我尝试在每条边上使用一个指针指向边连接的顶点时,由于交叉引用,我开始面临错误。您可以在下面看到类声明的简化版本。有没有办法解决这个错误?我应该总是远离交叉引用吗?您将如何实现两个相互指向彼此的不同节点? 提前致谢:)
class AirlineGraph{
private:
class routeListNode{
public:
cityListNode* destination;
routeListNode *next;
};
class cityListNode{
public:
string cityName;
int cityNumber;
cityListNode *next;
routeListNode *root;
};
int numCity,numRoute;
cityListNode* cityListRoot;
...
...
...
};
解决方法
您真正想要的是前向声明,例如:
class AirlineGraph::cityListNode;
...但是,对于 C++ 中的嵌套类,您不能这样做。仅在全局或命名空间范围内的类。这是语言的缺陷。
这里唯一的解决方案是取消嵌套其中一个类,以便可以向前声明它,或者使用基/派生层次结构并向前声明基。
我可能只是取消嵌套类。这对我来说似乎是一个很好的解决方案。如果您愿意,可以将其全部放在一个命名空间中。
,使用 std,您可以将代码简化为
class AirlineGraph{
private:
class City{
public:
// forbid copy,as we use reference to city
// and want to be sure to avoid possible relocation
City(const City&) = delete;
City operator=(const City&) = delete;
std::string cityName;
int cityNumber;
std::vector<City*> dests; // observer pointer
};
std::vector<std::unique_ptr<City>> cities; // use pointer,// instead of by value,so pointer are still valid
// after a resize.
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。