可能重复:
C header file loops
我总是在理解以下错误原因时遇到问题:
something.h
#ifndef SOMETHING_H
#define SOMETHING_H
#include "somethingelse.h"
#endif
somethingelse.h
#ifndef SOMETHINGELSE_H
#define SOMETHINGELSE_H
#include "something.h"
#endif
为什么会出错?
1)未定义SOMETHING_H
2)SOMETHING_H被定义,有些人被包括在内
3)SOMETHINGELSE_H未定义,定义,并且包含了something.h
4)定义了SOMETHING_H,跳转到#endif,这应该是它的结尾了吗?
结果证明它根本没有任何错误。但是以下是:
something.h
#pragma once
#include "somethingelse.h"
class something {
int y;
somethingelse b;
};
somethingelse.h
#pragma once
#include "something.h"
class somethingelse {
something b;
int x;
};
这是合乎逻辑的,因为当'somethingelse'需要该类的实例时,尚未定义类'某事'。
问题通过前瞻性定义解决:
something.h
#pragma once
class somethingelse;
class something {
int y;
somethingelse* pB; //note the pointer. Correct me if I'm wrong but I think it cannot be an object because the class is only declared, not defined.
};
在.cpp中,你可以包含“somethingelse.h”,并创建该类的实例。
答案 0 :(得分:1)
您的描述完全正确,但完全没有错误。在各个地方添加pragma message("Some text")
(假设Visual Studio)以跟踪流程。
正如其他海报已经注意到的那样,您的头文件很可能包含相互需要彼此定义的类,这就是问题的原因。这类问题通常由
解决#include
移至CPP文件答案 1 :(得分:0)
这正是发生的事情。
这被称为“包含守卫”,用于避免无限递归包含。