[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

Post autor: matma17 »

Kod: Zaznacz cały

#include<iostream>
#include<cstdlib>
#include<math.h>
#include<conio.h>

using namespace std;

class macierz
{	public:
		int k, w;
		double **tab;
		macierz();
		macierz(int kolumny, int wiersze)
		{
			k=kolumny;
			w=wiersze;
		}
		void wprowadz();
		void wypisz();
	
};
macierz::macierz()
{
	k=w=0;
}
void macierz::wprowadz()
{
	double tmp;
	cout<<"Podaj liczbe kolumn:" ; cin>>k;
	cout<<"Podaj liczbe wierszy:" ; cin>>w;
	double **tab = new double *[w]; //alokacja pamieci
	for ( int i = 0; i < w; ++i )
	{
		tab[i] = new double [k]; //alokacja pamieci
		for ( int j = 0; j < k; ++j) //wpisanie wartosci do tablicy
		{
			cout<<"Podaj wartosc A" <<i+1<<j+1<<endl;
			cin>>tmp;
			tab[i][j]=tmp;
		}
	}
};
void macierz::wypisz()
{
	for ( int i = 0; i < w; ++i)
	{
		cout<<endl;
		for ( int j = 0; j < k; ++j)
		cout<<tab[i][j];
	}
};
int main()
{
	char znak;
	cin>>znak;
	switch(znak)
	{
		case '1':
		{
			macierz m1;
			m1.wprowadz();
			m1.wypisz();
			
		}
		break;
	}
	
	
};
Witam,
Oto fragment programu o macierzach. Problem jest taki, że metoda wypisz nie wypisuje poprawnie wprowadzonej macierzy. Po prostu progam się zawiesza. W czym jest problem.? Najlpeiej będzie go skompilować, wtedy będzie ładnnie wdać o co mi chodzi.
Ostatnio zmieniony 4 gru 2013, o 23:19 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

Post autor: Afish »

Przy wprowadzaniu tworzysz nową zmienną przesłaniając oryginalną macierz.
Poza tym nie math.h, tylko cmath.
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

Post autor: Fibik »

Kod: Zaznacz cały

double **tab = new double *[w]; //alokacja pamieci
to nie ma być lokalna tablica, ewentualnie skopiuj to do tej tab w macierz, chyba tak:
this->tab = tab;

albo wywal część 'double **' z tej linii.
matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

Post autor: matma17 »

Fibik pisze:albo wywal część 'double **' z tej linii.
pomogło, dzięki.

-- 4 grudnia 2013, 10:46 --

Witam,
mam jeszcze problem z przeciążeniem operatorów. Narazie zrobiłem to tak
przeciążenie operatora dodawania.

Kod: Zaznacz cały

macierz operator+(const macierz& m1, const macierz& m2)
{
	for ( int i = 0; i < m1.w; ++i)
	{
		cout<<endl;
		cout<<"| ";
		for ( int j = 0; j < m1.k; ++j)
		cout<<m1.tab[i][j]+m2.tab[i][j]<<" | ";//jak widać od razu wypisuje na ekranie, nie tworzy nowej macierzy
	}	
	
};
i przeciążenie operatora <<

Kod: Zaznacz cały

ostream& operator<<(ostream& out, macierz& m)
{
	for ( int i = 0; i < m.w; ++i)
	{
		cout<<endl;
		cout<<"| ";
		for ( int j = 0; j < m.k; ++j)
		cout<<m.tab[i][j]<<" | ";;
	}
	cout<<endl;
};
Jeżeli w mainie chcę dodać macierze to po prostu piszę m3=m1+m2, i mi wypisuje macierz powstałą z dodania elementów z m1 i m2;
Ale gdybym chciał aby operator + tylko tworzył nową macierz i wpisywał do niej wartośći z m1 i m2, a na ekranie chciałbym wypisać operatorem <<, cout<<m3;
Jak to zrobić?? Próbowałem na kilka sposobów i nie działa.
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

[C++] Dlaczego nie ma dostępu do tablicy z innej funkcji.

Post autor: Fibik »

Fibik pisze:Ale gdybym chciał aby operator + tylko tworzył nową macierz i wpisywał do niej wartośći z m1 i m2, a na ekranie chciałbym wypisać operatorem <<, cout<<m3;
Jak to zrobić?? Próbowałem na kilka sposobów i nie działa.
Normalnie.

W tej funkcji operator+ deklarujesz trzecią m3, wsadzasz do niej co tam potrzeba, i kończysz: return m3.
ODPOWIEDZ