我正在使用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/