Несмотря на то, что прекомпилятор Visual Studio или как он там называется, распознает Graph как класс из другого заголовка, после сборки я получаю самые нелепые ошибки, действующие так, как будто я никогда раньше не упоминал другие заголовки.Сначала я не стал объявлять оба класса, и из этого вытекает первый набор ошибок ниже, но затем я попытался объявить вперед, и есть похожие ошибки, связанные со структурой самих классов.Использование функций из другого класса производит их, что показывает, что заголовочные файлы НИЧЕГО не делают.Они не знают о функциях друг друга, и я не знаю почему.
Vertex.h :
#pragma once
#include "Graph.h"
#include <vector>
class Graph;
class Vertex
{
int unique_id;
int longestChain = 0;
int chainComponent_id;
std::vector<int> edges;
Graph* master;
public:
int get_id()
{
return unique_id;
}
int getChainComponent_id()
{
return chainComponent_id;
}
void setChainComponent_id(int id)
{
chainComponent_id = id;
}
int DFS(int, int);
Vertex(int id, std::vector<int> _edges, Graph* _master)
{
unique_id = id;
edges = _edges;
master = _master;
longestChain = 0;
chainComponent_id = -1;
}
};
Graph.h :
#pragma once
#include "Vertex.h"
#include <vector>
#include <iostream>
class Vertex;
class Graph
{
std::vector<Vertex*> vertex;
int amountOfChainComponents = 0;
public:
Vertex* getVertex(int id)
{
if(id<0 || id>vertex.size())
{
return nullptr; //shouldn't be possible with proper input
}
return vertex[id];
}
int getAmountOfChainComponents()
{
return amountOfChainComponents;
}
int longestChain()
{
int longest = 0;
for(int i = 0; i < vertex.size(); i++)
{
if(vertex[i]->getChainComponent_id() == -1)
{
int tmp = vertex[i]->DFS(0, amountOfChainComponents);
amountOfChainComponents++;
if(tmp > longest)
{
longest = tmp;
}
}
}
if(longest == -1)
{
std::cout << "There is a chain for every positive integer" << std::endl;
return -1;
}
if(longest < 2)
{
std::cout << "There is no chain" << std::endl;
return 0;
}
return longest;
}
Graph(std::vector<std::vector<int>> vertices)
{
amountOfChainComponents = 0;
for(int i = 0; i < vertices.size(); i++)
{
Vertex* tmp = new Vertex(i, vertices[i], this);
vertex.push_back(tmp);
}
}
~Graph()
{
while(!vertex.empty())
{
delete vertex[vertex.size() - 1];
vertex.pop_back();
}
}
};
Строка Описание серьезности файла Файл 11 Ошибка синтаксической ошибки: отсутствует ';'до '*' c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h 34 Ошибка '_master': необъявленный идентификатор c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h 11 Ошибкаотсутствует указатель типа - предполагается int.Примечание: C ++ не поддерживает default-int c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h 11 Ошибка неожиданного токена (ов), предшествующего ';'c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h 30 Ошибка синтаксиса ошибки: идентификатор «График» c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h 34 Ошибка «master»: необъявленный идентификатор c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ vertex.h Строка Описание уровня серьезности файла 8 Ошибка 'Vertex': необъявленный идентификатор c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ graph.h
Ошибки, которые появляются после прямого объявления:
Строка серьезности Описание Файл 28 Ошибка при использовании неопределенного типа 'Vertex' c: \ users \ bico \ source \ repos \longestchaingraph \ longestchaingraph \ graph.h 28 Ошибка слева от '-> getChainComponent_id' должна указывать на класс / struct / union / универсальный тип c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ graph.h 30 Ошибка использования неопределенноговведите 'Vertex' c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ graph.h 30 Ошибка слева от '-> DFS' должна указывать на класс / struct / union / genericтип c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ graph.h 57 Ошибка использования неопределенного типа 'Vertex' c: \ users \ bico \ source \ repos \ longestchaingraph \ longestchaingraph \ graph.h