tablica wskaźnikow

0

Witam mam problem a mianowicie tworze sobie tablice wskaznikow w mainie na obiekty klasy stacja. w klasie stacja rowniez mam tablice wskaznikow na obiekty klasy stacja, ktory przechowuje informacje o stacjach ktore sa w jej zasiegu(nie wszystkie stacje) tworzac cos takiego:

void get_naighbour(station *tab,int rozm) 
	{
		table=new station*[getSize(rozm+1,tab)];
		table[0]=&tab[0];
		for (int i=0;i<(rozm+1);i++)
		{
			if((distance(tab[i].getposx(),tab[i].getposy()))<=300&&(distance(tab[i].getposx(),tab[i].getposy())!=0))
			{
				table[j]=&tab[i];
				++j;
			}
		}
	}	 

gdzie *tab i rozm sa odpowiednio glowna tablica wszystkich stacji i jej rozmiarem

moje pytanie brzmi czy to jest dobrze(czy elementy tablicy table wskazuja na elementy tablicy tab) oraz jak sie odwolac do konkretnego parametru w table aby ten parametr zmienial sie rowniez w tablicy glownej. Probowalem w ten sposob

void deactNeigh()
	{		
		for(int i=0;i<j;i++)
		{
			table[i]->activ=false;
		}			
	} 

ale niestety nie dziala
z gory dziekuje

0

void get_naighbour(station **tab, int rozm) przekazując tablicę do funkcji przekazujesz wskaźnik na pierwszy jej element, który jest wskaźnikiem na station, zatem są dwie *. do metod odwołujesz się wtedy używając operatora ->

0

czyli co zmienic zeby dzialalo? wlacze z tym juz prawie tydzien i juz nie mam na to pomyslu

0

podbijam pytanie

0

Prosty przykład:

#include <iosfwd>
#include <iostream>

class Station {
public:
    Station(int k, Station * (*t)[20]) {
        key = k;
        for(int i = 0; i < 20; ++i)
            neighbours[i] = (*t)[i];
    }
    Station(int k) {
        for(int i = 0; i < 20; ++i)
            neighbours[i] = 0;
        key = k;
    }
    ~Station() {
        for(int i = 0; i < 20; i++)
            if(neighbours[i])
                delete neighbours[i];
    }
    void printNeighbours() {
        std::cout<<"My neighbours are:"<<std::endl;
        for(int i = 0; i < 20; ++i)
            if(neighbours[i])
                neighbours[i]->print();
    }
    void print() {
        std::cout<<"I am Station no "<<key<<std::endl;
    }
private:
    Station * neighbours[20];
    int key;
    
};

int main(int argc, char * argv[]) {
    Station * tab[20];
    Station * myStation;
    
    for(int i = 0; i < 20; ++i)
        tab[i] = new Station(i + 100);
    
    myStation = new Station(300, &tab);
    
    myStation->print();
    
    myStation->printNeighbours();
    
    delete myStation;
    
    return 0;
}

0
 void get_naighbour(station *(*tab),int rozm) 
	{
		table=new station[getSize(rozm+1,*tab)];
		table[0]=*tab[0];
		++j;
		for (int i=1;i<(rozm+1);i++)
		{
			if((distance(tab[i]->getposx(),tab[i]->getposy()))<=300&&(distance(tab[i]->getposx(),tab[i]->getposy())!=0))
			{
				table[j]=(*tab)[i];
				++j;
			}
		}
	}	

a w main wywoluje funkcje:

 for (int i=0;i<N+1;i++)
	{
		pstat[i].get_naighbour(&pstat,N);
	}

stworzylem cos takiego na podtstawie przykladu i wywala naruszenie pamieci, a problem w tym ze wielkosc tablicy musi byc zmienna wpisywana w trakcie kompilacji

moze to deklaracja tablicy jest zla

w pliku main.cpp przed funkcja main mam deklaracje station *pstat;

a w mainie pod ten wskaznik przypisuje

pstat=new station[N] moze to jest zle ? z gory dzieki

0

podbijam

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