Templates C++ Code Organisation: Task 3. Parser
Подхода ми към тази задача беше да закоментирам случаите type == "w" и type == "s" и да се опитам да я реша за "i". След това да опитам да я направя във вид на template, но срещам трудност в този фрагмент:
if (type == 'i') {
Parser p(std::cin, stopLine);
int n;
std::vector<int> numbers;
while (p.readNext(n)) {
numbers.push_back(n);
}
printVector(numbers);
}
Трудността идва от там, че се опитвам да подам std::cin, stopLine директно в конструктора и не знам как да го напиша, че да тръгне. Това съм измислил до сега. Моля, за помощ и идеи.
class Parser {
private:
std::istream & line;
public:
Parser(std::istream & LINE) : line(LINE) {}
bool readNext(int n) {
if (line >> n)
{
return true;
}
else
{
return false;
}
}
};
Благодаря, подкарах го с int. Сега ще го мисля как да стане с <Т>.
Колеги успях да подкарам нещата да вървят със INT и със STRING, но естествено изпитвам трудности със Song и Template
Стигнах до тук: https://pastebin.com/vUDtVzTv
Подозирам, че е нещо простичко, но все пак ми дава грешка, въпреки, че предефинирах оператора "==":
Severity Code Description Project File Line Suppression State
Error C2678 binary '==': no operator found which takes a left-hand operand of type 'T' (or there is no acceptable conversion) 03Parser c:\users\ggeorgiev20\documents\git\softuni\c++\c++ advanced\templates\03parser\printutils.h 19
Error C2064 term does not evaluate to a function taking 1 arguments 03Parser c:\users\ggeorgiev20\documents\git\softuni\c++\c++ advanced\templates\03parser\printutils.h 17
Може ли малко помощ пак.
Първата грешка на 19 ред е защото сравняваш n, чийто тип е T, със stopLine което е string - т.е. различни типове. За втората грешка на 17 ред виж как се използва конструктора на ostring stream. Всъщност колежката се е объркала малко, трябва ти istringstream :)