Есть два класса, которые связаны друг с другом в своих заголовках:
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 подсвечивает код как обычно, но компиляция завершается неудачно из-за ошибок о недопустимом использовании неполного типа.
Не могли бы вы сказать мне, что не так? Я думаю, что это из-за неправильных перекрестных ссылок заголовков, но я столкнулся с этот и это не помогло мне.
Проблема решена.
Я только что переехал один из #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"// ...
Других решений пока нет …