相同名称空间问题中的相互依赖的类

时间:2011-05-11 06:34:59

标签: c++ visual-c++ gcc forward-declaration circular-dependency

我正处于一个真正的修复中......我需要移植代码,它具有许多相互依赖的类并使用名称空间以避免包含。这适用于 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;
//...
    }
}


请帮忙!

1 个答案:

答案 0 :(得分:0)

你的头文件中缺少警卫。

MSVC很可能允许您通过扩展程序执行此操作。因此,有两种方法可以解决这个问题:
1.第一个解决方案是合并这两个标题 2.第二个解决方案是转发声明模板类myContainer,并在basebuffer.hpp中动态创建它(而不是myString sData,创建myString *sData

修改 为baseBuffer添加一个cpp文件,并包含该文件而不是头文件。在标题转发声明模板类myString中,在源代码中,您可以包含任何您喜欢的内容。