将 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
如果有帮助的话。
我正在用 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
如果有帮助的话。