【问题标题】:making second argument of std::pair a custom class使 std::pair 的第二个参数成为自定义类
【发布时间】:2020-08-17 03:42:54
【问题描述】:

我正在 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&lt;size_t, Node&gt;::second uses undefined class 'Node'

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

【问题讨论】:

  • 请提取minimal reproducible example 并将其作为您问题的一部分提供。就目前而言,您的问题是题外话。
  • std::pair&lt;size_t, Node&gt;(或对Node 的任何其他引用,除了作为指针或引用之外)在类Node 的声明中无效,因为Node 是不完整的类型那一点。您将不得不考虑另一种方法。您想在这里实现什么目标?
  • @PaulSanders,我正在尝试制作一个简单的copy ctor
  • @d4rk4ng31 使用您的类,您不需要 复制构造函数(或赋值运算符 - 零规则)。无论如何,我无法理解的是,那些std::pair&lt;size_t, Node&gt;s 是为了什么?他们的目的是什么?
  • @PaulSanders, size_t 基本上是长度,即距离(我知道变量名有点混乱;会改变它)和Node 是距离的节点.它实际上需要是一个向量(我刚刚意识到)

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


【解决方案1】:
std::pair<size_t, Node> dist;

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

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

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

【讨论】:

  • 嗯......你是对的。谢谢。但那我该怎么办呢? :)
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多