Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeładowanie strumienia wyjścia i template

Ostatnio zmodyfikowano 2019-05-23 22:54
Autor Wiadomość
BlueBles
Temat założony przez niniejszego użytkownika
Przeładowanie strumienia wyjścia i template
» 2019-05-22 23:31:15
Witajcie zetknąłem się z problemem przeładowania operatora wypisania, otóż posiadam Macierz która posiada wartości jednego z typów int/Punkt3D/LiczbaZespolona otóż punkt w przestrzeni wypisuje prawidłowo, jednak mimo tego, że identycznie wyglądają ich przeciążenia nie mogę wywołać Macierz<Zespolona> błąd to
Błąd C2995 "std::ostream &operator <<(std::ostream &,const typdanych &)": szablon funkcji został już zdefiniowany

Klasa macierzy

C/C++
template < class typ >
class Macierz
{
private:
    int kolumny, wiersze;
   
    vector < vector < typ >> macierz;
   
public:
   
    Macierz( int kol, int wier )
    {
        this->kolumny = kol;
        this->wiersze = wier;
        macierz.resize( wiersze, vector < typ >( kolumny, 0 ) );
       
    }
   
   
    template < class typdanych >
    friend ostream & operator <<( std::ostream & stream, const typdanych & matrix ) {
       
        for( int i = 0; i < matrix.wiersze; i++ )
        {
            cout << "|";
            for( int p = 0; p < matrix.kolumny; p++ )
            {
                stream << showpos << right;
                stream << setw( 5 );
                stream << matrix.macierz[ i ][ p ];
            }
           
            cout << "  |" << endl;
        }
       
        cout << endl;
        return stream;
    }


wypisanie w klasie zespolone
C/C++
friend ostream & operator <<( std::ostream & stream, const Zespolona & XYZ ) {
    stream << XYZ.Rzeczywista << " + i" << XYZ.czescZespolona;
    return stream;
}

wypisanie w klasie punkt3d
C/C++
friend ostream & operator <<( std::ostream & stream, const Punkt & XYZ ) {
   
    cout << XYZ.x << "X " << XYZ.y << "Y " << XYZ.z << "Z ";
    return stream;
}

main
C/C++
//Macierz<Zespolona> pierwszaZes(1, 1);
//Macierz<Zespolona> drugaZes(1, 1);
//pierwszaZes.wypelnijZespolone();
//drugaZes.wypelnijZespolone();




Macierz < Punkt > pierwsza( 1, 1 );
Macierz < Punkt > druga( 1, 1 );
pierwsza.wypelnijPunktami();
druga.wypelnijPunktami();
cout << "Pierwsza" << endl;
cout << pierwsza;
cout << "Druga" << endl;
cout << druga;
cout << "dodawanie" << endl;
cout << pierwsza + druga;
cout << "odejmowanie" << endl;
cout << pierwsza - druga;

Punkt3d
https://pastebin.com/8Ss9ZdAN
Zespolone
https://pastebin.com/ZsXHqMcj
Macierz
https://pastebin.com/1zxr9ijg
Main
https://pastebin.com/gyVppCG7
P-174685
pekfos
» 2019-05-23 00:30:00
C/C++
template < class typdanych >
friend ostream & operator <<( std::ostream & stream, const typdanych & matrix ) {
Dlaczego to jest szablon? Argument powinien być typu Macierz.
P-174686
BlueBles
Temat założony przez niniejszego użytkownika
Zmienione jednak -> c2440
» 2019-05-23 15:08:15
Dziękuje za znalezienie błędu, faktycznie rozpędziłem się w template, jednak po zmianie tego wyskakuje błąd

Błąd C2440 "<function-style-cast>": nie można konwertować z "initializer list" na "std::vector<typ,std::allocator<_Ty>>"
        with
        [             typ=Zespolona,
            _Ty=Zespolona
        ] Macierze
P-174693
BlueBles
Temat założony przez niniejszego użytkownika
Działa
» 2019-05-23 15:28:35
Błędem była zbyt duża ilość konstruktorów w klasie liczb zespolonych, podczas ustawiania rozmiaru macierzy, nie wiedział jaki konstruktor użyć, usuniecie 2 z 3 konstruktorów, okazało się idealnym rozwiązaniem, program działa tak jak zakładałem. Dziękuję za pomoc pekfos.
P-174694
pekfos
» 2019-05-23 15:29:56
C/C++
macierz.resize( wiersze, vector < typ >( kolumny, 0 ) );
Strzelam, że chodzi o ten fragment kodu. Zamiast zera lepiej użyć typ(), albo typ{} jeśli piszesz w C++11 lub nowszym. Następnym razem podając treść błędu podaj jakoś miejsce w kodzie, o którym mówi kompilator. Nie zaszkodzi też wrzucać kod jako jeden plik, żeby łatwiej go móc samemu skompilować / przetestować.
» Kurs C++ / FAQJak wstawiać kod na forum? pytanie/odpowiedź
P-174695
BlueBles
Temat założony przez niniejszego użytkownika
» 2019-05-23 22:54:11
Tak chodziło dokładnie o to miejsce (faktycznie mogłem dodać). Dziękuję za wskazówki jak i za pomoc.
P-174708
« 1 »
  Strona 1 z 1