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