我正在使用Visual Studio 2008 Express版,并不断出现以下错误:
"Cascadedisplay.h(4) : fatal error C1014: too many include files : depth = 1024

显然我对包含文件做错了什么,但我只是看不到。

基本上,我有一个接口(interface)类StackDisplay,我想从该接口(interface)类派生另一个文件中的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

然后在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

那怎么了?

最佳答案

#if !defined...合法吗?我一直使用#ifndef

无论哪种方式,为什么您的“基本”类都需要引用CascadeDisplay?那似乎不对。考虑用对子类必须正确实现的CascadeDisplay中的纯虚函数的调用来替换创建新的StackDisplay的调用。

IE,类似的东西(原谅,我没有方便的c++编译器进行检查):

namespace Sol
{
    class StackDisplay
    {
        public:
            virtual ~StackDisplay();
            boost::shared_ptr<StackDisplay>
            make_cascade_display(boost::shared_ptr<int> csptr)
            {
                return make_display(csptr);
            }

        protected:
            virtual boost::shared_ptr<StackDisplay> make_display(boost::shared_ptr<int> csptr) = 0;
    };

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

        protected:
            virtual boost::shared_ptr<StackDisplay> make_display(boost::shared_ptr<int> csptr)
            {
                return new CascadeDisplay(csptr);
            }
    };
}

我相信这种解决方案通常比前向声明更好,因为您可以消除父类和子类之间的紧密耦合,并且可以创建更通用的接口(interface)。这使您可以消除StackDisplay.h中CascadeDisplay.h的#include

关于c++ - 为什么我得到 “too many include files : depth = 1024”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2438247/

10-12 23:07