Ошибка «неопределенная условная директива» в заголовках перекрестных ссылок - PullRequest
0 голосов
/ 04 июля 2018

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

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 Ответ

0 голосов
/ 04 июля 2018

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

Я только что переместил одну из #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"
// ...
...