Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ vector.push#u back不';不行![运行时错误]_C++_Vector_Runtime Error_Push Back - Fatal编程技术网

C++ vector.push#u back不';不行![运行时错误]

C++ vector.push#u back不';不行![运行时错误],c++,vector,runtime-error,push-back,C++,Vector,Runtime Error,Push Back,我在互联网上搜寻了一个解决方案,但还没有找到 在这个特定的代码中,push_back似乎不起作用。 AddConnection总是会被调用,而且是肯定的,但是每当我使用 node.connections.size() 它返回0,据我所知,这意味着向量是空的。这很奇怪,因为在检查大小之前,它会被调用大约20次。 以下事实进一步证明: n.nodes[0].connections[0]; 导致运行时错误 最奇怪的是,它只在我在Node的方法中调用它时才起作用(例如,在它的构造函数中) 编辑:这

我在互联网上搜寻了一个解决方案,但还没有找到

在这个特定的代码中,push_back似乎不起作用。 AddConnection总是会被调用,而且是肯定的,但是每当我使用

node.connections.size() 
它返回0,据我所知,这意味着向量是空的。这很奇怪,因为在检查大小之前,它会被调用大约20次。 以下事实进一步证明:

n.nodes[0].connections[0];
导致运行时错误

最奇怪的是,它只在我在Node的方法中调用它时才起作用(例如,在它的构造函数中)

编辑:这里不是原始代码,而是“最小、完整、可验证的示例”:

#包括
#包括
使用名称空间std;
类边缘;
类节点
{
公众:
int x,y;
向量连接;
Node():x(0),y(0){};
节点(内部a、内部b)
{
x=a;
y=b;
库特

由于每个
都有自己的两个
节点
对象,因此
节点
绝对不可能属于多个
。这不是表示节点和边的合理方法。边必须引用两个已存在的节点,而不是仅为该边创建两个新节点。

能否提供请?
Node
是一个类。这意味着您需要一个有效的
Node
实例才能运行。因此,需要一个,以显示如何、何时以及在何处创建这些
Node
实例。您是否尝试过在调试器中单步执行程序?我已经添加了您所说的内容。原始版本使用了解析器,但此代码生成的问题与原始代码相同。您放入各种容器中的所有项都是副本,因此您要求其大小的节点不是您添加连接的节点。
 #include <iostream>
 #include <vector>
 using namespace std;

 class Edge;

 class Node
 {
    public:
    int x, y;

    vector <int> connections;

    Node(): x(0), y(0) {};
    Node(int a, int b)
    {
        x= a;
        y = b;
        cout << "New node!\n";
    }
    void AddConnection(int n)
    {
        connections.push_back(n);
        cout << "Pushing connection...\n";
    }
  };

  class Edge
  {
 public:
Node nStart, nEnd;

   Edge(Node A, Node B)
   {
       nStart = A;
       nEnd = B;

       nEnd.AddConnection(1);
       nStart.AddConnection(1); //Every edge should input at least 2 ints.

       std::cout<< "New edge!"  <<"\n";

    };
};
 class Network
{
    public:
    vector <Node> nodes;
    vector <Edge> edges;

    void AddEdge(Edge newEdge)
    {
      edges.push_back(newEdge);
    }
    void AddNode(Node newNode)
    {
       nodes.push_back(newNode);
    }

};


int main()
{
   Network n;

   n.AddNode(Node(4,4));
   n.AddNode(Node(1,1));
   n.AddNode(Node(1,2));

   n.AddEdge(Edge(n.nodes[0], n.nodes[1]));
   n.AddEdge(Edge(n.nodes[1], n.nodes[2]));
   n.AddEdge(Edge(n.nodes[0], n.nodes[2]));

   cout << "Number of connections: " <<n.nodes[0].connections.size();

  //Uncommenting this will cause a runtime crash:
  //int j = n.nodes[0].connections[0];
  /*You can also change the connections[0] to [1] or maybe more, it will crash anyway*/

   return 0;
}
  class Edge
  {
 public:
Node nStart, nEnd;
...