C++ 无法从派生类调用基类方法

C++ 无法从派生类调用基类方法,c++,inheritance,C++,Inheritance,好的。我有这样一个代码: igraph.h: #include <iostream> #include <vector> #include <array> class igraph { protected: std::vector<std::vector<int>> matrix; // reprezentacja macierzowa grafu std::vector<std::vector<int&g

好的。我有这样一个代码:

igraph.h

#include <iostream>
#include <vector>
#include <array>

class igraph
{
protected:
    std::vector<std::vector<int>> matrix; // reprezentacja macierzowa grafu
    std::vector<std::vector<int>> adjacency_list; // reprezentacja w postaci listy sasiadow
    int number_of_vertices;
    int number_of_edges;
public:
    igraph();

    igraph(std::vector<std::vector<int>> data, int vertices); // konstruktor przyjmujacy dane w postaci wierzcholek, wierzcholek, waga/przepustowosc

    const std::vector<std::vector<int>> &getMatrix() const;

    const std::vector<std::vector<int>> &getAdjacency_list() const;

    unsigned int getNumber_of_vertices() const;

    unsigned int getNumber_of_edges() const;

    void print_matrix();

    void print_list();

};
#pragma once
#include <vector>
#include "igraph.h"

class directed_graph: public igraph
{
public:
    directed_graph();
    directed_graph(std::vector<std::vector<int>> data, int vertices);
};
现在我想从
igraph
导出。这就是我创建一个名为
directed\u graph.h
的类的原因:

#include <iostream>
#include <vector>
#include <array>

class igraph
{
protected:
    std::vector<std::vector<int>> matrix; // reprezentacja macierzowa grafu
    std::vector<std::vector<int>> adjacency_list; // reprezentacja w postaci listy sasiadow
    int number_of_vertices;
    int number_of_edges;
public:
    igraph();

    igraph(std::vector<std::vector<int>> data, int vertices); // konstruktor przyjmujacy dane w postaci wierzcholek, wierzcholek, waga/przepustowosc

    const std::vector<std::vector<int>> &getMatrix() const;

    const std::vector<std::vector<int>> &getAdjacency_list() const;

    unsigned int getNumber_of_vertices() const;

    unsigned int getNumber_of_edges() const;

    void print_matrix();

    void print_list();

};
#pragma once
#include <vector>
#include "igraph.h"

class directed_graph: public igraph
{
public:
    directed_graph();
    directed_graph(std::vector<std::vector<int>> data, int vertices);
};
现在,在另一个
.cpp
文件的某个地方(我包括
igraph.h
directed\u graph.h
),我做
directed\u graph myGraph=directed\u graph(数据,顶点)
。然后我想用
print\u matrix()
print\u list()
打印出来。我发现这些错误:


'igraph':'class'类型重新定义
'igraph':未定义的基类
“打印矩阵”:不是有向图的成员
“打印列表”:不是有向图的成员


这里怎么了?我认为它应该起作用,我认为推导正确,但问题出在哪里

class igraph
。那是因为你包括了
igraph.h
两次;一个来自“other”.cpp文件,一个来自
directed_graph.h
。您曾经忘记了一个
#pragma

您应该为
.h
使用guard,以避免重新定义

#ifndef  _X_H_
#define  _X_H_


....


#endif // _X_H_

是否可以在
.cpp
文件中实际使用
#pragma一次
?我将
#include
移动到
.h
文件,因为有问题的文件是
menu.cpp
,它包括
menu.h
,其中我有一次
#pragma
。但是,谢谢你,你忘了在igraph.h中放一次pragma