C ++和参考

时间:2010-12-10 18:34:43

标签: c++ inheritance reference

我目前正在开发一个包含多个文件的项目,并且有点复杂(在保持正确的继承方面)。我收到编译错误,我认为它与引用有关。这是我在编译时遇到的错误

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 中的私人数据。但由于某种原因,我调用此函数的方式与我的代码不匹配。

任何帮助都会很棒,谢谢。

3 个答案:

答案 0 :(得分:7)

Letscher::Video vid(); 默认构造变量vid。它声明了一个函数vid,它不带参数,返回Letscher::Video

您可能需要Letscher::Video vid;

答案 1 :(得分:4)

Letscher::Video vid();vexing。也就是说,它被解释为一个名为vid的函数的函数声明,该函数不带参数并按值返回Letscher::Video。删除最后的括号,它应该工作。

答案 2 :(得分:2)

在网上搜索最令人烦恼的C ++解析。您没有创建任何对象而是声明函数原型。