Loading...
damyan94 avatar damyan94 9 Точки

Полиморфизъм задача 4

Здравейте, получавам следната компилационна грешка при така написания код за базовия клас:

 

Error C2679 binary '>>': no operator found which takes a right-hand operand of type 'T' (or there is no acceptable conversion)

 

Предполагам причината се крие в предефинирането на оператора >>, може ли да се оправи и как, или трябва да се пренапише изцяло кога, тъй като може и да е тотално оплескан?

 

#ifndef TYPED_STREAM_H_
#define TYPED_STREAM_H_

#include <istream>
#include <vector>

template <typename T>
class TypedStream
{
private:
    std::string _input;
    std::vector<T> _values;

protected:
    std::istream stream;

public:
    TypedStream(const std::string& input) : _input(input) {}

    virtual TypedStream<T>& operator>>(T& var)
    {
        this->stream >> var;
        return *this;
    }

    std::vector<T> readToEnd()
    {
        T value;
        while (this->stream >> value) // error
            _values.emplace_back(value);

        return _values;
    }
};

#endif // !TYPED_STREAM_H_

 

Тагове:
0
C++ OOP
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, Дамян,

Тръгнал си добре. След това си се спънал :)

Компилационната грешка е доста ясна

'>>': no operator found which takes a right-hand operand of type 'T' 

Замесни Т със всички данни, които Т може да представлява в твоята задача и ще си отговориш на въпроса.
В един от случаите Т е Vector2D.

stream >> Vector2D 

Има ли такъв оператор в твоята задача? Няма. От там идва и една от грешките.

Някой от въпросите, които трябва да си зададеш:
1. Щом няма да използваш този стрийм във функцията "readToEnd" има ли нещо друго, което можеш да направиш? Има ли друга функция, която все още не си използвал?
2. Имаш ли нужда да помниш вектор в класа ти? Той няма ли да е нещо лекално, което се пълни и се връща? А какво ще стане, ако викна 2 пъти твоята функция? Ами 5? Ами 5000?
3. Потокът ти, който е в конструктора е празен. Помисли как да го напълниш с информация.
4. Когато имаме базов клас и виртуални функции какво още ни трябваше, което ти нямаш в твоето решение?

Поздрави

0
02/09/2021 12:41:07
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.