图包实现的#include /范围问题

时间:2017-05-20 18:05:37

标签: c++ pointers graph include shortest-path

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的指针向量(电影名称是键)代表特定电影的演员。

谢谢你!

0 个答案:

没有答案