graph.h:
#include<vector>
#include<unordered_map>
#include<iostream>
#include<queue>
#include<string>
#include"movie.h"
#include"actor.h"
class Graph {
private:
/*Member Variables*/
std::unordered_map<std::string,std::vector<Movie*>> vertices;
std::unordered_map<std::string,std::vector<ActorNode*>> edges;
public:
/*Constructor*/
Graph() {}
/*Destructor*/
~Graph();
};
actor.h:
#include<vector>
#include<unordered_map>
#include<iostream>
#include<queue>
#include<string>
//#include"actor.h"
class Movie; // forward declaration. only way i could get to compile.
/* (Vertex) Object Class to represent actors */
class ActorNode {
//can be converted to struct instead of class??
private:
/*Member Variables*/
std::string name;
std::vector<Movie*> movies;
public:
/*Constructor*/
ActorNode() : name("") {}
/*Getters and Setters*/
std::string getName();
void setName(std::string actor);
std::vector<Movie*> getMovies();
/*Member Functions*/
};
movie.h:
#include<vector>
#include<unordered_map>
#include<iostream>
#include<queue>
#include<string>
//#include"movie.h"
class ActorNode;
/* Object class to hold movies. Edges? */
class Movie {
//can be converted to struct instead of class?
private:
std::string movie;
int year;
int weight;
std::vector<ActorNode*> cast;
public:
/*Constructor*/
Movie() : movie(""), year(1), weight(1) {}
/*Getters and Setters*/
std::string getMovie();
void setMovie(std::string movie);
int getYear();
void setYear(int yr);
int getWeight();
void setWeight(int wt);
std::vector<ActorNode*> getCast();
/*Member Functions*/
};
所以我正在设计这些类来表示一个图表来执行解决两个actor之间的最短路径问题。 (六度凯文培根)为学校项目。
如您所见,类ActorNode有一个Movie指针向量,类Movie有一个ActorNode指针向量。
我想放
#include "actor.h" in movie.h
和
#include "movie.h" in actor.h
但这样做会导致无限循环继续,并且“#include嵌套太深”的错误会不断出现。
把
#include "graph.h" in actor.h
和
#include "graph.h" in movie.h
在编译器最终说之前,还会弹出一长串“from:”
错误:'class ActorNode'的先前定义
我能编译它的唯一方法是在actor.h中放入类Movie的前向声明,在movie.h中放入类ActorNode的前向声明
事情是感觉不对。就像ActorNode所持有的Movie指针类的向量一样,actor.h中的类Movie完全无关,类Movie中的类ActorNode指针的向量与actor.h中的ActorNode类无关。 / p>
不确定如何让编译器接受我想要做的事情:
类ActorNode包含类Movie对象的向量
class Movie包含一个ActorNode类指针的向量
class Graph包含两个哈希图,一个包含每个特定actor所在的电影指针的向量(actor名称是键),另一个hashmap包含指向actor的指针向量(电影名称是键)代表特定电影的演员。
谢谢你!