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 :)