CppUnit и включить проблемы

У меня есть проект, который имеет класс Container и класс итератора. В коде контейнер выглядит так:

#pragma once
#ifndef size_type
#define size_type unsigned int
#endif
#include "Iterator.h"#include "SimpleContainerReverseIterator.h"#include "SimpleContainerIterator.h"// Interface
/// class Container -
template <typename T>
class Container {
// Operations
public:
virtual ~Container ();
virtual  Iterator<T>* createIterator () = 0;
virtual  Iterator<T>* createReverseIterator () = 0;
virtual T at (size_type element) = 0;
...

SimpleContainerIterator и SimpleContainerReverseIterators являются унаследованными классами итератора (который является абстрактным классом). В коде SimpleContainerIterator мы имеем:

#pragma once
#include "Iterator.h"
/// class SimpleContainerIterator -
template <typename T>
class SimpleContainerIterator : public Iterator<T> {
// Attributes
private:
Container<T>* d_container;
int d_current;
// Operations
public:
friend class SimpleContainer<T>;
SimpleContainerIterator ();
~SimpleContainerIterator ();
...

В основном проекте я написал:

template<typename T> class Container;
template<typename T> class Iterator;
template<typename T> class SimpleContainer;
template<typename T> class SimpleContainerIterator;
template<typename T> class SimpleContainerReverseIterator;

#include "SimpleContainer.h"#include "SimpleContainerReverseIterator.h"#include "SimpleContainerIterator.h"
int main() {
...

обратите внимание, что SimpleContainer является конкретным классом абстрактного контейнера.

С такой конфигурацией все работает отлично. Проблема возникает, когда я сделал тест CppUnit для этого SimpleContainer.

Используя компилятор CppUnit, кажется, что включения не являются рекурсивными, потому что если я добавлю в тестовый класс директиву
#include «SimpleContainer.h»

компилятор выдает мне сообщение о том, что в классе SimpleContainerIterator появляются неопределенный контейнер и SimpleContainer. В других случаях я решил, что включение заголовков в файлы, которые нуждаются в них, но в этом случае это невозможно, потому что в контейнер классов включен «SimpleContainerReverseIterator.h», а в этот файл должен быть включен «Container.h». Добавляя ее и удаляя директиву #pragma Once, компилятор выдает мне ошибку «redefinition of class», а если я ее не добавляю, компилятор выдает мне неопределенную ошибку.

Любое предложение по этой проблеме с CppUnit ??

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector