无法从派生的一个方法调用基类方法
Cannot call base class method from derived one
好的。所以我有这样的代码:
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();
};
igraph.cpp
:
#include "igraph.h"
#include <iomanip>
/*
* Interfejs dla grafow - nieskierowanych i skierowanych
*/
igraph::igraph() : number_of_vertices(0), number_of_edges(0)
{
}
igraph::igraph(std::vector<std::vector<int>> data, int vertices)
{
this->number_of_edges = data.size();
this->number_of_vertices = vertices;
this->matrix = std::vector<std::vector<int>>(number_of_vertices, std::vector<int>(number_of_vertices, -1)); // zainicjalizowanie macierzy wartosciami -1
this->adjacency_list = std::vector<std::vector<int>>(number_of_vertices, std::vector<int>());
}
const std::vector<std::vector<int>> &igraph::getMatrix() const {
return matrix;
}
void igraph::print_matrix()
{
std::cout << 'n' << "Reprezentacja macierzowa: " << 'n';
std::cout << " ";
int i = 0;
for (i = 0; i < this->number_of_vertices; i++)
{
std::cout << std::setw(4) << i << " ";
}
std::cout << "n";
i = 0;
for (auto row = this->matrix.begin(); row!=this->matrix.end(); ++row )
{
std::cout << std::setw(4) << i;
for (auto col = row->begin(); col!=row->end(); ++col)
{
std::cout << std::setw(4) << *col << " ";
}
std::cout << 'n';
i++;
}
}
void igraph::print_list()
{
std::cout << 'n' << "Reprezentacja w postaci listy sasiadow: " << 'n';
int i, x;
for (i = 0; i < this->number_of_vertices; i++)
{
std::cout << std::setw(4) << i << " ";
for (x = 0; x < adjacency_list[i].size(); x++)
{
std::cout << std::setw(4) << adjacency_list[i][x] << " ";
}
std::cout << 'n';
}
}
const std::vector<std::vector<int>> &igraph::getAdjacency_list() const
{
return adjacency_list;
}
unsigned int igraph::getNumber_of_vertices() const
{
return number_of_vertices;
}
unsigned int igraph::getNumber_of_edges() const
{
return number_of_edges;
}
现在我想源自igraph
。这就是为什么我创建一个名为directed_graph.h
的类:
#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);
};
directed_graph.cpp
:
#include "directed_graph.h"
directed_graph::directed_graph() : igraph()
{
}
directed_graph::directed_graph(std::vector<std::vector<int>> data, int vertices) : igraph(data, vertices)
{
int row, col, cost;
for (int i = 0; i<number_of_edges; i++) // wpisywanie danych do macierzy
{
row = data[i][0];
col = data[i][1];
cost = data[i][2];
matrix[row][col] = cost;
}
int current_search = 0;
for (int x = 0; x < number_of_vertices; x++)
{
for (int i = 0; i<number_of_edges; i++)
{
if (data[i][0] == current_search)
{
adjacency_list[current_search].push_back(data[i][1]);
}
}
current_search++;
}
}
现在在其他.cpp
文件中的某个地方(其中我包括igraph.h
和directed_graph.h
(我做directed_graph myGraph = directed_graph(data, vertices)
。然后,我想用print_matrix()
和print_list()
打印出来。我得到这些错误:
'igraph': 'class' type redefinition
'igraph': base class unindefined
'print_matrix': is not a member of directed_graph
'print_list': is not a member of directed_graph
这里有什么问题?我认为它应该起作用,我认为正确得出了,但是那是什么问题
'igraph': 'class' type redefinition
应该告诉您您正在重新定义class igraph
。那是因为您两次加入igraph.h
;一个来自您的"另一个" .CPP文件,一次来自directed_graph.h
。您已经忘记了#pragma once
。
您应该将guard用于 .h
,以便避免重新定义。
#ifndef _X_H_
#define _X_H_
....
#endif // _X_H_
相关文章:
- 不能将方法返回的值用于另一个方法
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 重写另一个方法 [C++] 使用的超类回调函数
- C++:如何使用传递引用在一个方法中返回多个值
- 为什么一个方法对同一个变量有常量和非常量参数?
- 从同一类中的另一个方法调用方法时出错
- 向现有类添加一个方法以逐行读取文件的内容
- 无法从派生的一个方法调用基类方法
- 如何将一个方法中的值返回到同一类的另一个方法
- 方法重载 C++ -> 只有一个方法调用
- 在另一个线程中执行一个方法
- 是否可以在另一个方法中使用模板类中定义的虚拟方法
- 调用方法,该方法修改字段,而使用该字段的另一个方法正在执行
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- 仅专用于模板类的一个方法(部分)
- 确定一个方法是否是纯虚拟的(c++)
- 是否可以判断一个方法在编译时是否可以公开访问
- 我正在尝试创建一个方法,该方法使用指针算术返回一对,它是否会出错
- 从 ndk 中的 jni 方法调用另一个C++方法