使std::pair的第二个参数成为自定义类。

问题描述 投票:-1回答:1

我正在用C++实现一个Node类,作为一个任务。

这个类是.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 正在生成它(至少,那是错误信息指向的行号)。

c++ visual-studio compiler-errors std-pair
1个回答
2
投票
std::pair<size_t, Node> dist;

这个成员声明要求 Node 是在声明时完全定义的,但它不是。这就是错误告诉你的。

另外,你想做的事情是不可能的。的实例的内存布局应该是什么?Node 样子?一个实例 Node 拥有 dist 成员,它本身有一个成员的 Node 类型,它有一个 dist 成员等。这就需要无限的内存。

它允许有一个 Node* 在内 Node 如果这将有助于。

© www.soinside.com 2019 - 2024. All rights reserved.