C++ przeciążenie operatora << i >>

0

Mam problem z przeciążeniem operatora << i >>. Zrobiłam to w następujący sposób:

#include <iostream>
#include <cmath>
#include "t.h"
#include <cstdlib> 
#include <cfloat> 

class Macierz
{
private:
    unsigned int _m;
    unsigned int _n;
    float ** _A;

public:
    Macierz(unsigned int n, unsigned int m);
    Macierz operator+(Macierz & M1);
    Macierz operator-(Macierz & M1);
friend ostream & operator <<(ostream & ostrm, Macierz& wy);
friend istream & operator >> (istream & istrm, Macierz& we);

    void Wczytaj();
    void Wypisz();
    void ZmienZnak();
};

ostream &operator << (ostream & ostrm, const Macierz& wy)
{
  for(unsigned int i = 0 ; i < wy._n ; i++) {
    for(unsigned int j = 0; j < wy._m; j++)
      ostrm << wy._A[i][j] << " " ;
  ostrm << endl;
  }
  return ostrm;
}

istream &operator >> (istream & istrm, const Macierz& we)
{
  for(unsigned int i = 0 ; i < we._m ; i++)
    for(unsigned int j = 0; j <we._n;j++)
      istrm >> we._A[i][j];
  return istrm;
} 

Po kompilacji wyrzuca dużo błędów związanych z tym kawałkiem kodu. Wg mnie wszystko jest napisane poprawnie i nie wiem na czym mogą polegać te błędy.
Proszę o jakąkolwiek pomoc;)

2
 istream &operator >> (istream &istrm, Macierz &wy) // nie może być const bo ją zmieniasz 

Może zapoznaj się z tym: http://4programmers.net/Forum/1029663

0

Dziękuję za wskazówkę, ale to chyba nie to stanowi największy problem. Poniżej niektóre z błędów, które nadal się pojawiają;(

error C2143: syntax error : missing ';' before '&'

error C2433: 'ostream' : 'friend' not permitted on data declarations

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

error C2061: syntax error : identifier 'ostream'

error C2805: binary 'operator <<' has too few parameters

2
friend ostream & operator <<(ostream & ostrm, Macierz& wy);
friend istream & operator >> (istream & istrm, Macierz& we);

ostream &operator << (ostream & ostrm, const Macierz& wy)
istream &operator >> (istream & istrm, const Macierz& we)

Te 2 deklaracje z friend nie odpowiadają rzeczywistom funkcjom z powodu braku const przy parametrze Macierz. Po naprawieniu tego bez problemu się kompiluje: http://ideone.com/VCzXkz

0
_13th_Dragon napisał(a):
istream &operator >> (istream &istrm, Macierz &wy) // nie może być const bo ją zmieniasz 

Może zapoznaj się z tym: http://4programmers.net/Forum/1029663

Chyba drobny błąd się wkradł. Macierz nie jest zmieniana, co więcej, const powinno tam być ze względów czysto estetycznych, no i ja bym sie zastanawiał czy używać funkcji, która tego const'a nie ma kiedy w żadnym wypadku nie chce modyfikować macierzy. Const nie może stać przy obiekcie istream.

0

@up błąd, chyba myślałem, że chodziło o operator << ;p

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