2016-05-12 76 views
0

我有两个类:User.h和Room.h,它们都包含一个指向另一个类(用户到房间和空间到用户)的对象。 我想我知道如何包含.h文件,但我仍然在我的.cpp文件(user.cpp)之一中发生错误。两个类包含彼此的成员

user.h

#ifndef USER_H 
#define USER_H 

class Room; 

using namespace std; 

class User 
{ 
private: 
    Room* _currRoom; 
public: 
    //some functions... 
}; 

#endif 

room.h

#ifndef ROOM_H 
#define ROOM_H 

#include "User.h" 

class Room 
{ 
private: 
    vector<User*> _users; 
    User* _admin; 
    int _maxUsers; 
    int _questionTime; 
    int _questionsNo; 
    string _name; 
    int _id; 

public: 
    Room(int id, User* admin, string name, int maxUsers, int questionsNo,int questionTime); 
    //more functions... 
}; 

#endif 

我包含在user.cpp room.cpp和room.h user.h什么问题我做了什么?

+2

你不应该包含'cpp'文件 – Rakete1111

+5

如果你有错误,你应该分享它们。我们喜欢错误文本。 – NathanOliver

+0

错误错误C2514:'Room':class没有构造函数,我在user.cpp中调用构造函数 – abcdef123

回答

0

room.h中,将#include "User.h"替换为前向声明。使用前向声明在.h文件,移动相应#include语句到.cpp文件:

user.h

#ifndef USER_H 
#define USER_H 

class Room; 

using namespace std; 

class User 
{ 
private: 
    Room* _currRoom; 
public: 
    //some functions... 
}; 

#endif 

user.cpp

#include "user.h" 
#include "room.h" 
... 

room.h

#ifndef ROOM_H 
#define ROOM_H 

#include <vector> 
#include <string> 

class User; 

class Room 
{ 
private: 
    vector<User*> _users; 
    User* _admin; 
    int _maxUsers; 
    int _questionTime; 
    int _questionsNo; 
    string _name; 
    int _id; 

public: 
    Room(int id, User* admin, string name, int maxUsers, int questionsNo, int questionTime); 
    //more functions... 
}; 

#endif 

room.cpp

#include "room.h" 
#include "user.h" 
... 

如果不这样做的前置声明以这种方式,可以在圆形情况下的头部间接包含本身经由另一头结束(A包括B,它包括A),因此它的报头警卫已经被定义为阻止它的声明被处理,从而导致错误。

+0

非常感谢!现在我可以继续 – abcdef123