gpt4 book ai didi

c++ - 从对象 vector 中获取字段 C++

转载 作者:行者123 更新时间:2023-11-30 05:27:09 25 4
gpt4 key购买 nike

我正在尝试用 C++ 制作图形类。我将每个节点的边存储为 Edge 类的 vector 。 Edge 类有一个 getWeight() 函数,但它返回了奇怪的值。

我认为这与获取边的拷贝有关,而不是与已分配的实际边有关。

这是 Edge 类:

#ifndef EDGE_INCLUDED
#define EDGE_INCLUDED
#include "Node.h"


class Node;


class Edge {

private:
Node endpoint;
double weight;

public:
Edge();
Edge(const Edge &edge);
double getWeight() const;
void setWeight(double weight);
};
#endif // End EDGE_INCLUDED
/////////////////////////////////////////////////////////////////
#include "Edge.h"
#include "Node.h"

Edge::Edge(){}
Edge::Edge(const Edge &edge) {}

double Edge::getWeight() const { return this->weight; }

void Edge::setWeight(double weight) { this->weight = weight; }

这是 Node 类

#ifndef NODE_INCLUDED 
#define NODE_INCLUDED

#include <string>
#include <vector>

class Edge;

class Node {
private:
std::string label;
std::vector<Edge> edges;

public:
const std::string getLabel() const;
void setLabel(std::string label);

const size_t degree() const;

std::vector<Edge> getEdges();
void setEdges(std::vector<Edge> edges);
};
#endif // End NODE_INCLUDED
/////////////////////////////////////////////////////////
#include "Node.h"
#include "Edge.h"


const std::string Node::getLabel() const { return this->label; }

void Node::setLabel(std::string label) { this->label = label; }

const size_t Node::degree() const { return this->edges.size(); }

std::vector<Edge> Node::getEdges() { return this->edges; }

void Node::setEdges(std::vector<Edge> edges) { this->edges = edges; }

最后是主要部分

#include <iostream>
#include "Edge.h"
#include "Node.h"


int main()
{
Edge edge1;
Node node;

std::vector<Edge> edges;

edge1.setWeight(2.0);

edges.push_back(edge1);

node.setEdges(edges);

std::vector<Edge> e = node.getEdges();

for (auto i : node.getEdges())
std::cout << i.getWeight() << std::endl;
}

很抱歉发布了这么多代码,但我希望有人能够看到我哪里出错了。 谁能看到我的错误并指出我的更好设计?

最佳答案

Edge 的构造函数中,您没有初始化成员 weight。因此,您会看到未初始化的垃圾值。

将它们更改为:

Edge::Edge() : weight(0.0) {}
Edge::Edge(const Edge &edge) : weight(edge.weight) {}

关于c++ - 从对象 vector 中获取字段 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com