我目前正在开发一个包含多个文件的项目,并且有点复杂(在保持正确的继承方面)。我收到编译错误,我认为它与引用有关。这是我在编译时遇到的错误
videotodatastream.cpp: In member function ‘virtual void Wade::VideoToDataStream::getData(std::string&)’:
videotodatastream.cpp:33: error: no matching function for call to ‘Wade::VideoWrapper::getVideo(Letscher::Video (&)())’
videowrapper.h:10: note: candidates are: virtual void Wade::VideoWrapper::getVideo(Letscher::Video&)
这是抱怨的行
Letscher::Video vid();
_vid.getVideo(vid); //Problem line
_vid 是 VideoWrapper&
类型的私人会员数据VideoWrapper& _vid;
VideoWrapper 是纯虚拟基类,具有以下方法:
class VideoWrapper {
public:
virtual void setVideo(Letscher::Video& video) = 0;
virtual void getVideo(Letscher::Video& video) = 0;
};
我实际使用的 VideoWrapper 的子类是 RawVideo ,它看起来像这样
class RawVideo : public VideoWrapper {
public:
RawVideo(Letscher::Video& video);
virtual void setVideo(Letscher::Video& video);
virtual void getVideo(Letscher::Video& video);
private:
Letscher::Video* _vid;
};
Wade::RawVideo::RawVideo(Letscher::Video& video): _vid(&video) {
}
void Wade::RawVideo::setVideo(Letscher::Video& video) {
*_vid = video;
}
void Wade::RawVideo::getVideo(Letscher::Video& video) {
video = *_vid;
}
所以当我调用_ vid.getVideo(vid)时,我希望它采用视频对象 vid ,并设置其值到 RawVideo 中的私人数据。但由于某种原因,我调用此函数的方式与我的代码不匹配。
任何帮助都会很棒,谢谢。
答案 0 :(得分:7)
Letscher::Video vid();
不默认构造变量vid。它声明了一个函数vid
,它不带参数,返回Letscher::Video
。
您可能需要Letscher::Video vid;
。
答案 1 :(得分:4)
Letscher::Video vid();
是vexing。也就是说,它被解释为一个名为vid
的函数的函数声明,该函数不带参数并按值返回Letscher::Video
。删除最后的括号,它应该工作。
答案 2 :(得分:2)
在网上搜索最令人烦恼的C ++解析。您没有创建任何对象而是声明函数原型。