我有一个来源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