Ошибка «неопределенная условная директива» в перекрестных ссылках заголовков

Есть два класса, которые связаны друг с другом в своих заголовках:

PlotMarker

#ifndef PLOTMARKER_H
#define PLOTMARKER_H

#include <QObject>
#include "plotter.h"
class Plotter;

class PlotMarker : public QObject
{
// ...
Plotter* m_attachedPlot;
// ...
};

#endif // PLOTMARKER_H

графопостроитель

#ifndef PLOTTER_H
#define PLOTTER_H

// ...
#include "plotmarker.h"// ...

class PlotMarker;

class Plotter : public QQuickPaintedItem
{
// ...
QLinkedList<PlotMarker*> m_markerList;
// ...
};

#endif // PLOTTER_H

Программа скомпилирована хорошо, но есть ошибка error: unterminated conditional directive в #ifndef и код классов в IDE не выделяется из-за этого.

Если я удалю #include "plotter.h" в заголовке PlotMarker или #include "plotmarker.h" в заголовке Plotter Qt Creator подсвечивает код как обычно, но компиляция завершается неудачно из-за ошибок о недопустимом использовании неполного типа.

Не могли бы вы сказать мне, что не так? Я думаю, что это из-за неправильных перекрестных ссылок заголовков, но я столкнулся с этот и это не помогло мне.

1

Решение

Проблема решена.

Я только что переехал один из #include из заголовка в исходный файл, и это сработало.

plotmarker.h

#ifndef PLOTMARKER_H
#define PLOTMARKER_H

#include <QObject>

class Plotter;

class PlotMarker : public QObject
{
// ...
Plotter* m_attachedPlot;
// ...
};

#endif // PLOTMARKER_H

// …

plotmarker.cpp

#include "plotmarker.h"#include "plotter.h"// ...
2

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

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

По вопросам рекламы [email protected]