Прямое объявление C ++ в Qt - PullRequest
0 голосов
/ 12 июня 2018

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

class Channel
{
public:

enum ChannelType {
    DIMMER, RED, GREEN, BLUE, STROBE
};

Channel(ChannelType type);
const ChannelType type;

void x(Fixture fixture);
};

class Fixture
{
    public:
    Fixture(int channel, FixturePattern pattern);

    Channel getChannel(const Channel::ChannelType);

    private:
        const int channel;
        FixturePattern pattern;
};

class FixturePattern
{

public:
    FixturePattern(QList<Channel> channels);
    Channel getChannel(Channel::ChannelType type);

private:
    QList<Channel> channels;
};

Эти классы находятся в отдельных заголовочных файлах.Я пытался соединить их с #include, но у меня всегда возникают неполные типы или ошибка XY was not declared in this scope.Может кто-нибудь объяснить мне, что я делаю не так?
Я не добавил #include с тех пор, как вчера полностью облажался.Недавно я уже нашел вопрос с этой темой, но я не хочу помещать его в тот же файл.Возможно ли это?

1 Ответ

0 голосов
/ 12 июня 2018

Не вдаваясь во многие детали, вы должны использовать предварительное объявление для ваших классов.Вам нужно будет изменить свой код, чтобы иметь возможность это сделать.Код должен выглядеть примерно так.Я не проверял это, но оно должно работать.

class Fixture; // the forward deceleration 
class Channel
{
public:

enum ChannelType {
    DIMMER, RED, GREEN, BLUE, STROBE
};

Channel(ChannelType type);
const ChannelType type;

void x(const Fixture &fixture); // or void x(Fixture *fixture);
};

#include "FixturePattern.h" 
class Fixture
{
    public:
    Fixture(int channel,const FixturePattern &pattern);

    Channel getChannel(const Channel::ChannelType); 

    private:
        const int channel;
        FixturePattern pattern;
};

#include "Channel.h"
class FixturePattern
{

public:
    FixturePattern(QList<Channel> channels);
    Channel getChannel(Channel::ChannelType type);

private:
    QList<Channel> channels;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...