Професионална програма
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
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 4432 Точки

Виж коментарът ми от 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 4432 Точки

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

1
m.nikolov97 avatar m.nikolov97 25 Точки

Здравей!

Темата е малко стара, но на мен ми се наложи да решавам тази задача и намерих твоето разяснение, без което най-вероятно нямаше да се справя.

Имам един въпрос - защо в тази задача ако се използва във функцията readToEnd()

while (this->operator>>(current))

 хвърля грешка само за custom типа ни - в случая Vector2D,а за int и string е ок - това онзачава ли, че автоматично те си връщат bool, че е ок, малко съм объркан frown

 

Благодаря ти предварително за отделеното време!

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