C++ Advanced - 04. Advanced C++ Class Members - Task 4 - Resources
Здравейте, някой може ли да хвърли малко светлина върху енумерациите, по точно как да въведем стойност. От main-а разбирам, че r.type e ResourceType, но при следния метод:
istream& operator>>(istream& In, Resource& r)
{
return In >> r.id >> r.type >> r.link;
}
получавам грешка: no match for 'operator>>' (operand types are 'std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}' and 'SoftUni::ResourceType')
Как да въведа полето тогава? Явно тези неща са ми минали покрай ушите и са си заминали ;D. Ще съм благодарна ако някой ми разясни.
Здравей, опитах и така, но ми изкарва друга грешка: no match for 'operator<' (operand types are 'const SoftUni::Resource' and 'const SoftUni::Resource')
Предполагам, че грешката е при този запис:
void operator>>(istream& In, Resource& r)
{
string t;
In >> r.id >> t >> r.link;
if(t == "Presentation")
{
r.type = PRESENTATION;
}
else if(t == "Demo")
{
r.type = DEMO;
}
else
{
r.type = VIDEO;
}
}
Въобще нещо ми се губи при работата с енумерации. Би ли ми казал, в коя лекция се споменават, за да си припомня.
Този код ми изглежда верен, грешката, която ти дава, не е за operator<<, а за operator<, който най-вероятно overload-ваш за да можеш да добавяш Resource обекти в set.
И това, което ти казва, е че параметрите на operator< трябва да са const обекти (или const референции) за да може да го ползва set-а (най-вероятно си забравила да напишеш const пред един от двата параметъра). Може да погледнеш последните слайдове на лекцията, там имаше quick quiz точно за тази ситуация.
Иначе за enum говорихме в последната лекция на C++ Fundamentals, тази за класове и обекти, в първите слайдове - но не сме задълбочавали много. Като цяло ми се струва, че ги разбираш достатъчно добре, но прегледай отново ако искаш.
Много благодаря! Направо ме е срам каква нелепа грешка съм направила и си блъскам няколко часа главата. Но така е като пиша код между задачите по математика и анализа на античната драма.
Колеги на мен пък ми дава тази грешка: binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion) ... това е част от кода ми и се чудя дали тук не бъркам нещо понеже навсякъде имам констанци както си му е реда...
namespace SoftUni {
struct Resource
{
int id;
ResourceType resType;
std::string link;
ResourceType getType() const{ return resType; } // Да не би тук нещо да трябва да направя ?
friend std::istream& operator>>(std::istream& inp, Resource& r);
friend std::ostream& operator<<(std::ostream& out,const Resource& r);
};
В main() имаш set от ресурси и той трябва да знае как да подреди обектите в него, т.е. ако имаш 2 обекта от клас/структура Resource кой от тях да бъде преди другия в сета. Затова ти трябва тази функция operator< Можеш да я направиш по 2 начина - като метод на класа/структурата Resource или като самостоятелна функция извън Resource. Това се учи в предишния курс C++ Fundamentals.
Разбрах колега. Много ти благодаря!