将 std::pair 的第二个参数设为自定义 class

making second argument of std::pair a custom class

我正在用 C++ 实现一个节点 class 作为一项任务。

class :

#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 如果有帮助的话。