C ++ и ссылки - PullRequest
       24

C ++ и ссылки

3 голосов
/ 10 декабря 2010

В настоящее время я работаю над проектом, который имеет несколько файлов и является немного сложным (с точки зрения сохранения права наследования).Я получаю ошибку компиляции, и я думаю, что это как-то связано со ссылками.Вот ошибка, которую я получаю во время компиляции

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) ,Я хочу, чтобы он взял Video объект vid и установил его значение для личных данных в RawVideo .Но по какой-то причине способ вызова этой функции не совпадает с моим кодом.

Любая помощь будет отличной, спасибо.

Ответы [ 3 ]

7 голосов
/ 10 декабря 2010

Letscher::Video vid(); не не по умолчанию создает переменную vid. Он объявляет функцию vid, которая не принимает параметров и возвращает Letscher::Video.

Вы, вероятно, хотите вместо Letscher::Video vid;.

4 голосов
/ 10 декабря 2010

Letscher::Video vid(); - это досадно . То есть он интерпретируется как объявление функции для функции с именем vid, которая не принимает аргументов и возвращает Letscher::Video по значению. Снимите конечную скобку, и она должна работать.

2 голосов
/ 10 декабря 2010

Поиск самого неприятного синтаксического анализа C ++ в сети.Вы не создаете никакой объект, вместо этого вы объявляете прототип функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...