为什么我会收到"太多包含文件:深度= 1024"?

Bee*_*and 2 c++ include

我正在使用Visual Studio 2008 Express版,并且不断收到以下错误:

"Cascadedisplay.h(4) : fatal error C1014: too many include files : depth = 1024.

显然我对包含文件做了一些非常错误的事情,但我看不出是什么.

基本上,我有一个接口类,StackDisplay我想从中导出CascadeDisplay另一个文件:

#if !defined __BASE_STACK_DISPLAY_H__
#define __BASE_STACK_DISPAY_H__

#include <boost\shared_ptr.hpp>
#include "CascadeDisplay.h"

namespace Sol
{
    class StackDisplay
    {
        public:
            virtual ~StackDisplay();
            static boost::shared_ptr<StackDisplay>
            make_cascade_display(boost::shared_ptr<int> csptr)
            {
                return boost::shared_ptr<StackDisplay>(new CascadeDisplay(csptr));
            }
    };
}
#endif
Run Code Online (Sandbox Code Playgroud)

然后在CascadeDisplay.h中:

#if !defined __CASCADE_DISPLAY_H__
#define __CASCADE_DISPAY_H__

#include "StackDisplay.h"
#include <boost\shared_ptr.hpp>

namespace Sol
{
    class CascadeDisplay: public StackDisplay
    {
        public:
            CascadeDisplay(boost::shared_ptr<int> csptr){};
    };
}

#endif
Run Code Online (Sandbox Code Playgroud)

那有什么用呢?

小智 9

#if !defined __CASCADE_DISPLAY_H__
#define __CASCADE_DISPAY_H__
Run Code Online (Sandbox Code Playgroud)

第二行应该是:

#define __CASCADE_DISPLAY_H__
Run Code Online (Sandbox Code Playgroud)

与:相同:

#if !defined __BASE_STACK_DISPLAY_H__
#define __BASE_STACK_DISPAY_H__
Run Code Online (Sandbox Code Playgroud)

此外,包含双下划线的名称是为实现保留的,不允许在自己的代码中创建此类名称.对于以单个下划线和大写字母开头的名称也是如此.

  • @BeeBand:使用`#ifndef`来显示这样的拼写错误.`#ifndef`与`#define`的长度相同,因此宏名称将对齐,你会立即发现一个字符丢失了.:) (6认同)