实例化类

时间:2015-08-05 00:50:48

标签: c++ incomplete-type

我有一个顶点类,它有一个id和邻接列表作为私有成员。邻接列表存储为映射。当我实例化这个类的对象时,我想创建一个空映射。我正在从python切换到C ++,它的证明比我想象的更难。这是该课程的代码:

#include "vertex.h"

class Vertex {
    char _id;
    std::map<char, int> _adjList;

public:
    void addNeighbor(Vertex, char neighbor, int weight);
    std::vector<char> getConnections(Vertex);
    char getId();
    int getWeight(Vertex, char neighbor);
    Vertex(char);
};

Vertex::Vertex(char id){
    std::map<char, int> adjList;
    _adjList = adjList;
    _id = id;

}

void Vertex::addNeighbor(Vertex v, char neighbor, int weight){
    v._adjList.insert(std::map<char, int>::value_type(neighbor, weight));
}

std::vector<char> Vertex::getConnections(Vertex v){
    std::vector<char> ids;
    for(std::map<char,int>::iterator it = v._adjList.begin(); it != v._adjList.end(); ++it) {
        ids.push_back(it->first);
    };
    return ids;
}

char Vertex::getId(){
    return _id;
}

int Vertex::getWeight(Vertex v, char neighbor){
    return v._adjList[neighbor];
}

现在我在main

中实例化了这个
Vertex V('a');

编译器抛出一个错误,即变量的类型为Vertex。任何帮助是极大的赞赏。基本上我想构造一个具有id和空映射的对象,该映射将id和路径权重保存到相邻节点。我这样做是为了学习目的

我的vertex.h有:

#ifndef __graphs__vertex__
#define __graphs__vertex__

#include <stdio.h>
#include <map>
#include <vector>

class Vertex;

#endif

然后在我的主要内容中包含vertex.h

1 个答案:

答案 0 :(得分:1)

Vertex的定义应该在标题中,而不是在cpp:

我修改了方法声明以添加const并删除参数Vertax,因为您应该使用this值。

#ifndef graphs_vertex_h
#define graphs_vertex_h

#include <map>
#include <vector>

class Vertex {
    char _id;
    std::map<char, int> _adjList;

public:
    explicit Vertex(char);

    void addNeighbor(char neighbor, int weight);
    std::vector<char> getConnections();
    char getId() const;
    int getWeight(char neighbor) const;
};

#endif