obiekt w return

0

Witam
Dlaczego podczas kompilacji tego kodu:

    
class wektor
    {
    protected:
        int n, *tablica;

    public:
        wektor(int n_par, int tablica_par[])
        {
            n=n_par;
            tablica=new int[n];
            for(int pom=0;pom<n;pom++)
            {
                tablica[pom]=tablica_par[pom];
            }
        }

        wektor(int n_par)
        {
            n=n_par;
            tablica=new int[n];
            for(int pom=0;pom<n;pom++)
            {
                tablica[pom]=0;
            }
        }

        
        wektor operator+(wektor wektor_par)
        {
            int pom = 0;
            if(n>=wektor_par.n)
            {
                wektor w1(n);
                for(pom;pom<wektor_par.n;pom++)
                    w1.tablica[pom]=tablica[pom]+wektor_par.tablica[pom];
                for(pom;pom<n;pom++)
                    w1.tablica[pom]=tablica[pom];
            }
            else
            {
                wektor w1(wektor_par.n);
                for(pom;pom<n;pom++)
                    w1.tablica[pom]=tablica[pom]+wektor_par.tablica[pom];
                for(pom;pom<wektor_par.n;pom++)
                    w1.tablica[pom]=wektor_par.tablica[pom];
            }
            return w1; 
};

Wyskakuje mi bład w

return w1;

o treści "error: 'w1' was not declared in this scope|"
Proszę o pomoc

0

poczytaj o zakresie zmiennych (widocznosci)

kompilator mowi prawde, w tym miejscu nie masz zadeklarowanej zmiennej w1

0

jakoś w to nie wierzyłem... ;D
Dzięki za szybka pomoc

0

Teraz mam nowy problem...
jeżeli zdefiniuje operator wewnątrz klasy to mi działa

        friend ostream& operator<<(ostream &ekran, wektor w_par)
        {
           for(int pom=0;pom<w_par.n;pom++)
        ekran<<w_par.tablica[pom]<<" ";
        return ekran; 
      }

Nie potrafie zdefiniować poza klasa

        friend ostream& operator<<(ostream &ekran, wektor w_par)
        {
        /*
           for(int pom=0;pom<w_par.n;pom++)
        ekran<<w_par.tablica[pom]<<" ";
        return ekran;
         */
        }

    }; //koniec klasy



ostream& operator<<(ostream &ekran, wektor w_par)
{
    for(int pom=0;pom<w_par.n;pom++)
        ekran<<w_par.tablica[pom]<<" ";
    return ekran;
} 

Wyskakuje mi blad "|error: redefinition of 'std::ostream& operator<<(std::ostream&, wektor)'|" przy ostream& operator<<(ostream &ekran, wektor w_par)
Ponownie porszę o pomoc

0

W klasie ma zostać: friend ostream &operator<<(ostream &ekran, wektor w_par); ze średnikiem na końcu/
Rozważ przekazanie wektor'a jako: const wektor &w_par

1
class wektor
{
    ...

    friend ostream& operator<<(ostream &out, wektor w_par);
};

ostream& operator<<(ostream &out, wektor w_par)
{
    ...
    return out;
}

Nie nazywaj strumienia "ekran", bo ideą ostream jest to, że to wcale nie musi być ekran.

0

Faktycznie... ;D
Dzięki :)

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