Loading...
niagara avatar niagara 22 Точки

C++ Advanced - 08. C++ OOP Inheritance and Polymorphism - Task 3 - Typed Stream

Здавейте, много се измъчих с тази задача. В while-a получавам грешка "binary '>>': no operator found which takes a left-hand operand of type 'std::istringstream' (or there is no acceptable conversion)". Мисля, че грешката ми е във виртуалния метод, но не съм сигурна каква точно е.

Ето го моят код: https://pastebin.com/pkppUi90

Тагове:
0
C++ Programming
MartinBG avatar MartinBG 4803 Точки

Виж коментра на Жоро в тази тема - той е точно за този проблем.

0
niagara avatar niagara 22 Точки

Прочетох го вече, но не успях да се справя.

0
MartinBG avatar MartinBG 4803 Точки

Класът ти е наред, с изключение на един детайл в readToEnd(), който Жоро е описал в поста си, но ще оставя на него да прецени дали да даде още подсказки по тази задача.

0
niagara avatar niagara 22 Точки

Опитах да използвам this->operator>>(read) в цикъла. Оттам окрих, че не намира оператор >> във Vector2D. Разбрах, че за него трябва да се извика VectorStream, но не знам как. Трябва ли да редактирам виртуалния метод или да създам вариант за template<> class TypedStream<Vector2D> Тук стигнах до задънена улица.

0
niagara avatar niagara 22 Точки

Не се сещам как да оправя кода за Vector2D. В while-a използвам this->operator>>(curr). От там имам грешка "conditional expression of type 'TypedStream<Vector2D>' is illegal". Това означава, че while не получава стойност true/false ли? И ако е така как да проверя, дали въвеждането е било успешно?

0
MartinBG avatar MartinBG 4803 Точки

Виж коментарът ми от 17:46 за подробности, но накратко най-лесно е да проверяваш сейта на stream полето на класа:

while (this->operator>>(curr).stream.good()) {
...
}

 

Алтернативно, може да овърлоуднеш bool оператора за TypedStream:

  explicit operator bool() const {
    return this->stream.good();
  }

Така ще можеш директно да използваш инстанции на класа в булеви изрази:

while (this->operator>>(curr)) {
...
}

или

while (*this >> curr) {
...
}

В тази тема съм писал малко повече за това.

1
niagara avatar niagara 22 Точки

Много благодаря! Сега обаче забелязах друга грешка. В main-a не трябва ли да има #include <vector>? Дава ми грешки на 22 ред и при извеждането на .readToEnd(). Когато сложа #include <vector> всичко се оправя и работи добре.

0
MartinBG avatar MartinBG 4803 Точки

Инклудни vector в TypedStream.h. Така индиректно ще го инклуднеш и във всички други файлове, които инклудват TypedStream.

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