将对象放入向量中,未定义的标识符

时间:2017-09-28 07:01:00

标签: c++ oop

我对c ++比较陌生。我正在尝试创建图表类。我尝试在图构造函数中创建顶点向量,但是当我调用Vector.push_back

时我得到一个未定义的标识符错误
#include <iostream>
#include <string>
#include <vector>

class Graph {
public: Graph(int vertexNum) {
    for (int i = 0; i < vertexNum - 1; i++)
        Vertex vert(i);
        this->vertexList.push_back(vert);
    }
    private:
    class Vertex {
        public: 
        Vertex(int vertexId) {
            this->vertId = vertexId;
        }
        int vertId;
    };


    std::vector<Vertex> vertexList;
};

我确定代码中还有其他逻辑错误,我还没有解决,我还在努力,但我想知道我在做什么向量错误。

以下是错误说明:

标识符&#34; vert&#34;是未定义的dijkstra main.cpp 9
&#39; vert&#39 ;:未声明的标识符dijkstra main.cpp 9

2 个答案:

答案 0 :(得分:1)

在C ++之前,您可以使用变量,甚至在类定义中也需要声明它,只需将std :: vector的声明移动到使用它的构造函数之上就可以解决该错误。这就是人们通常为类创建标题的原因,因此所有声明都在其中完成,而.cpp包含实现。类似地,您需要对顶点类和边类进行相同的操作。此外,Graph实现依赖于Vertex类的存在,因此需要在Graph实现之前声明和实现Vertex类。另外,更重要的是你忘了在for循环中放置括号,这是主要的问题

#include <iostream>
#include <string>
#include <vector>
   class Graph {
        private:
        class Vertex {
            public: 
            int vertId;
            Vertex(int vertexId) {
                this->vertId = vertexId;
            }

        };

        class Edge {
            public:
                Vertex* start;
                Vertex* end;
                int weight;
                Edge(Vertex* start, Vertex* end, int weight) {
                    this->start = start;
                    this->end = end;
                    this->weight = weight;
                }

        };

        public:
        std::vector<Vertex> vertexList; 
        Graph(int vertexNum) {
        for (int i = 0; i < vertexNum - 1; i++) {
            Vertex vert(i);
            this->vertexList.push_back(vert);
           }
        }
    };

答案 1 :(得分:1)

这是压痕很重要的情况。你的for循环中没有大括号,所以它理解为

for (int i = 0; i < vertexNum - 1; i++) {
    Vertex vert(i);
}
this->vertexList.push_back(vert);

现在有意义的是vert未定义。