C ++ struct错误

时间:2015-08-21 01:15:42

标签: c++ struct

struct Node{
    int ID, power, parent;
    vector<int> connectedNodes;

    Node(int ID_arg, int power_arg){
        ID = ID_arg;
        power = power_arg;
        parent = -1;
    }
};

struct Graph{
    int rootID;
    map<int, Node> nodes;
    map<int,int> subtreeSizes;

    Graph(){
        rootID = 1;
        nodes[1] = new Node(1,0);
    }

};

我现在肯定有严重的失误,因为我不知道出了什么问题。它不喜欢我将节点放在节点映射中的方式。

1 个答案:

答案 0 :(得分:3)

那是因为你的类型不匹配,如果你发布了编译错误,那就很明显了:

nodes[1] = new Node(1,0);
^^^^^^^^   ^^^^^^^^^^^^^
  Node&       Node*

你可能想做类似的事情:

nodes[1] = Node(1, 0);

由于Node不是默认可构造的,map::operator[]需要这个,因此在这种特定情况下无法工作。以下替代方案无论如何都适用:

nodes.insert(std::make_pair(1, Node(1, 0));
nodes.emplace(std::piecewise_construct,
              std::forward_as_tuple(1),
              std::forward_as_tuple(1, 0));
// etc.