我有一个来源C:

#include "image.h"

#ifndef SOURCE_H
#define SOURCE_H

class Source
{
    private:
        Image* img;
    public:
        virtual void Execute()=0;
        Image* GetOutput();
};
#endif

Image* Source::GetOutput()
{
    return this->img;
}

和一个水槽
#include "image.h"


#ifndef SINK_H
#define SINK_H
class Sink
{
    private:
        Image* img1;
        Image* img2;

    public:
        void SetInput(Image* input1);
        void SetInput2(Image* input2);
};
#endif

void Sink::SetInput(Image* input1)
{
    this->img1 = input1;
}

void Sink::SetInput2(Image* input2)
{
    this->img2 = input2;
}

我有一个filter.h,我想从Source和Sink继承:
#include "image.h"
#include <iostream>
#include <stdlib.h>

class Source;
class Sink;

class Filter : Source, Sink
{
    public:
        Filter() {std::cout << "Constructing filter." << std::endl;}
};

但是,编译器为我提供了错误使用无效类型“类源”和“类接收器”的错误。对于那些相同的类,我也得到前向声明错误。这些类最初具有直接在public中定义的函数,因此我将它们移出了,但这无济于事。明确将Source和Sink设置为public也无济于事。这是怎么回事?

最佳答案

#include "sink.h"
#include "source.h"

应该把你整理出来。

也是这一行:class Filter : Source, Sink
这是私有(private)继承,几乎总是您不想要的(您将无法多态使用该类)。

您可能需要将其更改为
class Filter : public Source, public Sink

10-08 05:37