我有两个类: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 我做了什么问题?
答案 0 :(得分: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),因此它的标题保护已经已被定义,以防止其声明被处理,从而导致错误。