我正处于一个真正的修复中......我需要移植代码,它具有许多相互依赖的类并使用名称空间以避免包含。这适用于 MSVC ,但我无法找到解决 GCC 中这种情况的方法:(
myString.h 文件的内容:
#include "baseBuffer.h"
//I can't forward declare a base class, so I have to include its header
namespace test
{
class MY_ALLOCATOR
{
static const unsigned int LIMIT = 4096;
class myBuffer : public BaseBuffer<LIMIT>
{
//...
}
};
template <class T, typename ALLOC = MY_ALLOCATOR> class myContainer
{
//...
}
typedef myContainer<char> myString;
}
baseBuffer.h 文件的内容:
#include "myObject.h"
//#include "myString.h"
//I can't include **myString.h**, because it includes this header file and I can't seem to find a way to use forward declaration of **myString** class...
namespace test
{
template <uint limit> class BaseBuffer : public MyObject
{
public:
myString sData;
//...
}
}
请帮忙!
答案 0 :(得分:0)
你的头文件中缺少警卫。
MSVC很可能允许您通过扩展程序执行此操作。因此,有两种方法可以解决这个问题:
1.第一个解决方案是合并这两个标题
2.第二个解决方案是转发声明模板类myContainer,并在basebuffer.hpp中动态创建它(而不是myString sData
,创建myString *sData
)
修改强> 为baseBuffer添加一个cpp文件,并包含该文件而不是头文件。在标题转发声明模板类myString中,在源代码中,您可以包含任何您喜欢的内容。