使 std::p air 的第二个参数成为自定义类



我正在C++中实现一个 Node 类作为赋值。

班级 :

#pragma once
#include <iostream>
class Node {
size_t id;
std::pair<size_t, Node> dist;
public:
//Node();
//Node(const size_t);
Node(const size_t, const std::pair<size_t, Node>);
Node(const Node&);
//std::pair<const bool, const std::string> setId(size_t);
//std::pair<const bool, const std::string> setDist(std::pair<size_t, Node>);
//void operator=(const Node&);
};

Node::Node(const size_t nodeId, const std::pair<size_t, Node> distanceFromPreviousNode) : id(nodeId), dist(distanceFromPreviousNode) { }

Node::Node(const Node& node) {
try {
id = node.id;
dist = node.dist;
throw std::string("Could not set the id and distance to given value");
}
catch (std::string exception) {
std::cerr << exception;
exit(1);
}
}

我保证所有功能都已在node.cpp文件中实现。

但是,我收到以下错误std::pair<size_t, Node>::second uses undefined class 'Node'

我完全不知道错误要我做什么以及为什么intellisense没有检测到它。 哦,ctor也在生成它(至少,这是错误消息指向的行号)

std::pair<size_t, Node> dist;

此成员声明要求在声明点完全定义Node,但事实并非如此。这就是错误告诉您的。

此外,您要尝试做的事情是不可能的。Node实例的内存布局应该是什么样子的?Node的实例有一个dist成员,该成员本身具有Node类型的成员,该成员具有dist成员,等等...这将需要无限内存。

如果有帮助的话,允许在Node中有一个Node*成员。

最新更新