C ++访问类对象向量中的元素

时间:2017-12-18 12:34:00

标签: c++ class object vector

我正在尝试访问类对象向量中的元素,但我没有把它弄好。我想构造函数/解构函数和引用有问题,但其他问题甚至是C++ destructor issue with std::vector of class objectsc++ vector of class object pointersC++ vector of objects vs. vector of pointers to objects。希望有人可以帮我修改我的代码片段。

node.h

ContentResolver

node.cpp

class Node {

public:
    Node();
    Node(int id, const std::string& name);
    Node(const Node& orig);
    virtual ~Node();

    void cout(void);

    int get_id(void);

private:
    int _id;
    std::string _name;

};

communication.h

#include "node.h"

Node::Node() {
}

Node::Node(int id, const std::string& name) : _id(id), _name(name) {
    this->cout();
}

Node::Node(const Node& orig) {
}

Node::~Node() {
}

void Node::cout(void) {
    std::cout << "NODE " << _id << " \"" << _name << "\"" std::endl;
}

int Node::get_id(void) {
    return _id;
}

communication.cpp

#include "node.h"

class Com {

public:
    std::vector<Node> nodes;

    Com();
    com(const Com& orig);
    virtual ~Com();

    void cout_nodes(void);

private:

};

如果我运行#include "communication.h" Com::Com() { nodes.push_back(Node(169, "Node #1")); nodes.push_back(Node(170, "Node #2")); } Com::Com(const Com& orig) { } Com::~Com() { } void Com::cout_nodes(void) { for (uint8_t i = 0; i < nodes.size(); i++) { nodes[i].cout(); } } ,我会得到预期的输出:

Com com;

但运行[I 171218 13:10:10 Cpp:22] < NODE 169 "Node #1" [I 171218 13:10:10 Cpp:22] < NODE 170 "Node #2" 会导致:

com.cout_nodes();

C++ vector of objects vs. vector of pointers to objects一样,当我使用引用时一切正常但我无法使[I 171218 13:10:14 Cpp:22] < NODE 0 "" [I 171218 13:10:14 Cpp:22] < NODE 0 "" std::iterator工作。

更新:工作find_if语句和索引计算

find_if

1 个答案:

答案 0 :(得分:8)

您定义了此复制构造函数:

Node::Node(const Node& orig) {
}

它没有做任何复制。它默认初始化正在构造的Node的所有成员。由于std::vector::push_back会复制其参数,因此您的伪造副本会复制。

而不是强制定义编译器可以自己正确地合成的操作(您只有intstd::string作为成员),而不是声明它。

或者,如果您确实想要显式(或需要,例如使用默认的c'tor),只需明确默认它:

class Node {

    Node()                 = default;
    Node(const Node& orig) = default;

};