c++ - 做std::pair a custom class的第二个参数

标签 c++ visual-studio compiler-errors std-pair

我在C++中实现Node类作为分配。

类(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成员。

关于c++ - 做std::pair a custom class的第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61563013/

相关文章:

c++ - 为什么文件读取函数中有额外的括号?

c++ - 变量或字段 'name of var'声明为void

c++ - OpenGL 窗口应用程序多久检查一次事件更新?

c++ - 比较字符 [C++]

c++ - 对于无复制/无移动类型,要扩展的最小类是什么?

c# - COM、STA 和多线程

visual-studio - Sql Server 数据库项目 - VS 2013 中缺少模板

c++ - c++ chrono存储time_point表达式必须是可修改的左值

c++ - 删除 std :list<User_Define> that satisfy certain conditions? 中元素的最佳方法是什么

c# - 单击按钮时如何检查已经打开的窗口?