实例化类时出现不完整类型错误

Incomplete type error when instantiating class

本文关键字:类型 错误 实例化      更新时间:2023-10-16

我有一个顶点类,它有一个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和到相邻节点的路径权重。我这样做是为了学习

My vertex.h has:

#ifndef __graphs__vertex__
#define __graphs__vertex__
#include <stdio.h>
#include <map>
#include <vector>
class Vertex;
#endif

然后在main中加入vertex。h

顶点的定义应该在header中,而不是在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