C++ - problem z zadaniem

0

Witajcie
Mam takie zadanie do nasiania w którym trzeba stworzyć klasę vect która reprezentuje wektor liczb typu double (ma dwa pola - dynamiczną tablicę typu double i zmienną typu int która przechowuje długość tej tablicy) i w tej klasie jest kilka metod w tym przeciążenie operatora >> jako funkcja globalna. Tą część mam już zrobioną i wszystko działa.
Dalej trzeba stworzyć klasę svect która dziedziczy po klasie vect i zawiera te same metody co klasa vect plus metoda sort która sortuje wektor. Wywołanie jakiejkolwiek metody klasy svect ma wywołać też metodę sort. I tu mam problem z tą funkcją globalną przeciążającą operator >>.

Jak wywołać funkcję sort po wywołaniu operatora >>? Nie mogę napisać drugi raz funkcji globalnej przeciążającej operator >> (w pliku svect.h lub svect.cpp) bo dostaję błąd.

Tu jest treść zadania: http://home.agh.edu.pl/~jbyrski/PO/zadanie07.pdf

A tu mój kod: https://workupload.com/file/e5tmTqvPVNS

0

Jaki dostajesz błąd? Pomysł z dziedziczeniem jest tu chybiony, ale zadanie to zadanie...

0

No dokładnie, zadanie to zadanie - jak każą tak trzeba zrobić :)

Jak dodam kod funkcji globalnej do pliku zad06sv.cpp i jej deklaracje jako funkcji zaprzyjaźnionej do zad06sv.h to dostaję taki błąd:

multiple definition of `operator>>(std::istream&, vect&)'

Edit: Boże jak ja nie myślę :D Dodałem do klasy svect funkcje globalną która ma parametr typu svect a nie vect i teraz działa - w sensie nie ma błędu :) Pozostaje tylko kwestia jak teraz wywołać w funkcji zaprzyjaźnionej metodę sort?

0

A powiedz mi, przeciążasz ten operator dla jakiej klasy?

0

Dobra już mam :D
w1.sort() w funkcji przeciążającej operator >>

Dzięki za pomoc :)

0

operator>> dla vecs można by zapisać bez getline, stoi, etc. Wydaje mi się, że byłoby prościej:

    friend std::istream &operator>>(std::istream &in, vect &obj)
    {
        char c;
        in >> c; // consume '['
        size_t count;
        in >> count;

            delete[] obj.data;
            obj.data = 0;
            obj.size = 0;
            obj.data = new double[count];
            obj.size = count;


        for (size_t i = 0; i < count; ++i)
        {
            in >> obj.data[i];
        }

        return in >> c; // consume ']'
    }

poza tym nie widzę u ciebie zwalniania pamięci w tym operatorze.

W treści zadania nie ma mowy o wersji standardu np. -std=c++11, którą domyślnie CodeBlocks ma ustawioną. Bez niej u mnie się wywala na braku stoi i stod, obie dostępne dopiero od c++11. Wyślesz program, napiszą że się nie kompiluje i pała jak nic :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1