odwołanie do wskaźnika do zmiennej publicznej

0

Witam

Pierwszy raz piszę na tym forum więc z góry przepraszam jeśli coś robię nie tak.
Mam taki problem:
Stworzyłem sobie klasę o nazwie "Area" w której mam wskaźnikowe zmienne publiczne:

public:
	dynamic_array<float>* X;
	dynamic_array<float>* Y;

Wewnątrz tej klasy żeby się do nich odwołać robiłem coś takiego:

(*X)[j][i] += x;
(*Y)[j][i] += y;

Nie wiem natomiast jak się odwołac do nich z kodu poza tą klasą. Czyli cos w stylu:

Area obiektArea;
obiektArea.*X[j][i];
obiektArea.*Y[j][i];
0

Spróbuj

(*obiektArea.X) [j][i];
(*obiektArea.Y) [j][i];
0

Próbowałem nie pomogło. Od razu powiem też że nie działa:

*(obiektArea.X) [j][i];
ani
obiektArea.(*X) [j][i];
ani
*obiektArea.X[j][i];
0

Co znaczy nie pomogło? W jaki sposób nie działa - nie kompiluje się, wysypuje podczas pracy? Podejście przedstawione przez Ranidesa jest właściwe.

0

Nie kompiluje się. Wyskakuje komunikat :"Unhandled exception at 0x00402126 in akcja1.exe: 0xC0000005: Access violation reading location 0x9c006278." i wskazuje na linię gdzie jest ten kod.

0

Człowieku! To się skompilowało i uruchomiło! Wyjątek podczas wykonywania kodu w tamtej linii... Daj cały kod.

0

Nie jestem pewien co dać bo trochę dużo tego. Mam nadzieję że to co dam wystarczy.
Część kodu z klasy DataProcessing.h:

AreaData adProcessing;
...
DataProcessing::DataProcessing(AreaData adReceived){
	AreaData adProcessing(adReceived);
	adCols = adProcessing.getNumOfCols();
	adRows = adProcessing.getNumOfRows();
	minDistance = 3;
}
...
void DataProcessing::removeNoise(){
	setOpenCVImage();
	float x, y, z;
	int i, j, k;
	for(i = 0; i< adCols; i++){
		for(j = 0; j < adRows; j++){
			if((*adProcessing.Count)[i][j] > 0.01){
				x = (*adProcessing.X)[i][j]/(*adProcessing.Count)[i][j];
				y = (*adProcessing.Y)[i][j]/(*adProcessing.Count)[i][j];
				z = (*adProcessing.Z)[i][j]/(*adProcessing.Count)[i][j];			
				
				data[(j-0)*step+(i-0)*3] = z/1;
				data[(j-0)*step+(i-0)*channels + 1] = x/3;
				data[(j-0)*step+(i-0)*channels + 2] = 1-(z/1);				
				/*
				if(z <0.60 && z>0.55){
					data[(i-begY)*step+(j-begX)*channels + 2] = 1;
				}else if(z < 0.55){
					data[(i-begY)*step+(j-begX)*channels + 2] = 0.5;
				}else{
					data[(i-begY)*step+(j-begX)*channels + 2] = 0;
				}
				*/
			}else{
				data[(j-0)*step+(i-0)*3] = 1;
				data[(j-0)*step+(i-0)*channels + 1] = 0;
				data[(j-0)*step+(i-0)*channels + 2] = 0;
			}
		}
	}
}

Konstruktor klasy AreaData

AreaData::AreaData(int cols, int rows){
	X = new dynamic_array<float>(cols, rows);
	Y = new dynamic_array<float>(cols, rows);
	Z = new dynamic_array<float>(cols, rows);
	Count = new dynamic_array<int>(cols, rows);
	adCols = cols;
	adRows = rows;
}
...
AreaData::AreaData(const AreaData &adToCopy){
	X = adToCopy.X;
	Y = adToCopy.Y;
	Z = adToCopy.Z;
	Count = adToCopy.Count;
}

X, Y, Z, Count to są tablice dwuwymiarowe.

W sumie to nie wiem czy nie byłoby łatwiej gdybym wrzucił cały kod...

Zapomiałem dodać gdzie się wywala :)
Chodzi o linię;

y = (*adProcessing.Y)[i][j]/(*adProcessing.Count)[i][j];

Dziwne bo wcześniej zawsze chodziło o linię

if((*adProcessing.Count)[i][j] > 0){

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