взаимозависимые классы в одной и той же проблеме пространства имен - PullRequest
1 голос
/ 11 мая 2011

Я нахожусь в реальной ситуации ... Мне нужно портировать код, который имеет много взаимозависимых классов и использует пространства имен, чтобы избежать включений. Это работает в 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 голосов
/ 11 мая 2011

В ваших заголовочных файлах отсутствуют элементы защиты.

Скорее всего, MSVC позволяет вам делать это через расширение.Следовательно, есть два способа решить эту проблему:
1. 1-е решение - объединить эти два заголовка.
2. 2-е решение - это объявить шаблон класса myContainer напрямую и динамически создать его в basebuffer.hpp.(вместо myString sData создайте myString *sData)

EDIT Добавьте файл cpp для baseBuffer и включите его вместо файла заголовка.В заголовке вперёд объявляем шаблон класса myString, а в исходном коде вы можете включить что угодно.

...