Judge Assignment 04 - Task 05 Lectures
Здравейте!
Макар, че задачата след известна игра я реших, имам няколко въпроса, на които се надявам някой малко да ме просвети за компилационните грешки и причините им, понеже нещо не успях да разбера с ровене в нета. :D
1. По принцип вкъщи ползвам основно Visual Studio, понеже ми е по-удобен, а на работа понеже имам пролуки свободно време, ползвам CodeBlocks. Преди да превключа на CodeBlocks, единият ми член на класът (итератора, който трябваше да направя) го бях дефинирал така:
std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<namespace::T>>> begin() const
(Държа да отбележа, че до този код стигнах, след като VS в логът с грешките ми изкара, че този тип му трябва, но в момента вече нямам старият код, който изкарваше въпросният лог) И се компилираше нормално, но после като минах на CodeBlocks даваше следната грешка при компилацията:
"error: '_Tree_const_iterator' in namespace 'std' does not name a template type"
При което след "човъркане" подкарах с:
std::Т<Т>::iterator begin() const // нарочно слагам тук "T" за тип, защото все пак е домашно
Това върви и под компилатора на VS. Та въпросът ми е - каква е причината за тази грешка и какво точно значи?
2. При дефинирането на оператор "[]" доста време ми отне да разбера, защо точно пищи компилатора с грешката:
"error: 'Т& namespace::operator[](namespace::T&)' must be a nonstatic member function" (пак замених с "Т" и "namespace" за да не подсказвам много). Тук основно "nonstatic" частта ме обърква. Под VS дава, че трябва да е просто "member function".
Въпросът ми е - защо специално за този оператор трябва задължително (или поне аз не открих начин) да бъде дефиниран в класът? Оператори "<<", ">>", "<" без проблем можех да ги дефинирам извън класове (приемайки за агрументи въпросният клас и другото нещо, което му трябва, в сравнение само с нещото което му трябва, ако е дефинирано в самият клас) и после да ги пусна като "friend". И разбира се, в крайна сметка коя е по-добрата практика?
Благодаря предварително! И happy coding на всички! :D
Поздрави!
Супер! Now I’ve seen it all! :D Много благодаря за обясненията сенпай Жоро! :)