przekazywanie obiektu struktury do funkcji

0

Witam,
Mam pewien problem, otóż nie wiem czy do funkcji wraz z obiektem struktury jakim jest adres dynamicznej tablicy przekazać również całą strukturę. Generalnie chodzi o ten kod który chciałbym rozbic na pojedyńcze funkcje

//......

cin >> l;
        punkt *punkt2D = new punkt[l];
        for(int i = 0; i < l; i++)
        {
            cin >> punkt2D[i].nazwa >> punkt2D[i].x >> punkt2D[i].y;
            punkt2D[i].odleglosc = (pow( (0 - punkt2D[i].x), 2 )+pow( (0 - punkt2D[i].y), 2));
        }

        for(int j = 0; j < l-1; j++)
            for(int k = 0; k < l-1; k++)
            {
                if(punkt2D[k].odleglosc > punkt2D[k+1].odleglosc)
                    swap(punkt2D[k], punkt2D[k+1]);
            }

        for(int i = 0; i < l; i++)
            cout << punkt2D[i].nazwa << " " << punkt2D[i].x << " " << punkt2D[i].y << endl;
//.....

Dzięki

0

Ale gdzie widzisz problem? o_O Możesz do funkcji przekazać ten swój wskaźnik.

0

do funkcji przekazuje wskaznik i odbieram go przez referencje i niestety wywala błąd.. Bo niby po co miałbym tworzyc drugi wskaźnik wewnątrz funkcji?
Czyli co, tylko obiekt wystarczy przekazać?

0

Ale po co chcesz go "odbierać"? W ogóle o co ci chodzi? Po co jakis drugi wskaźnik wewnątrz funkcji? Nie, nie wystarczy przekazać obiektu bo przekażesz jego kopię. Albo przekaż wskaźnik na obiekt, albo wskaźnik na całą tablicę albo referencje do obiektu.

1
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

struct punkt
  {
   string nazwa;
   double x,y;
   bool operator<(const punkt &p)const { return x*x+y*y<p.x*p.x+p.y*p.y; }
  };
ostream &operator<<(ostream &s,const punkt &p) { return s<<p.nazwa<<' '<<p.x<<' '<<p.y; }
istream &operator>>(istream &s,punkt &p) { return s>>p.nazwa>>p.x>>p.y; }

void input(punkt *T,unsigned N) { while(N--) cin>>*(T++); }
void output(punkt *T,unsigned N) { while(N--) cout<<*(T++)<<endl; }

int main()
  {
   unsigned N;
   cin>>N;
   punkt *punkt2D=new punkt[N];
   input(punkt2D,N);
   output(punkt2D,N);
   cout<<endl<<"Sort"<<endl;
   sort(punkt2D,punkt2D+N);
   output(punkt2D,N);
   return 0;
  }

http://ideone.com/mRaI0V

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