[c++]Problem ze wskaźnikiem

Odpowiedz Nowy wątek
Kamil Cierczek
2009-10-23 02:49
Kamil Cierczek
0

Witam,
od paru godzin siedzę i walczę, i nic... W czym problem? Ot piszę program na zaliczenie (algorytm szeregowania zadań). Chciałem to zrobić tak jak przedstawiłem w kodzie, czyli:

  • struktura SProcess, która przechowuje czas stygnięcia, czas wykonywania i czas dostarczenia, dla pojedynczego zadania.
  • jakis zbiornik do przechowywania dowolnej liczby zadan (u mnie nazywa sie on TVector i jest szablonem).
  • wektor o dlugosci jak pkt wyżej, przechowywujący inty'y będące indexami do pól wektora z pkt. wyzej.
  • klasa, ktora rozwiazywalaby problem, a w niej dwa pola-wskaźniki na powyższe wektory plus metody.

Obkodowałem to tak:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct SProcess{
    int r;
    int p;
    int q;
};

template <class T> class TVector{
        public:
            T *data;
            int m_nRozmiar;
            TVector(){ };
            TVector(int);
            ~TVector( ) { delete[ ] data; }
            T& operator[ ] (int i) { return data[i]; } //przeciazany operator []
            int GetSize(){return m_nRozmiar;}
};

template <class T> TVector<T>::TVector(int n){
        data = new T[n];
        m_nRozmiar = n;
};

class CFlowshop{
    public:
        TVector<SProcess> *pTasks;
        TVector<int> *Index;
        int iCmax;
        CFlowshop(TVector<SProcess> *pVector,TVector<int> *pIndex);
        ~CFlowshop(){ };
};

CFlowshop::CFlowshop(TVector<SProcess> *pVector,TVector<int> *pIndex){
    cout<<pVector->GetSize();
    TVector<int> Index(pVector->GetSize());
    for(int i=0;i<(pVector->GetSize());i++){

    }
}

Problem mam w konstruktorze klasy CFlowshop - w jaki sposób korzystać z wskaźników pIndex i pVector??? Chodzi mi o wstawianie i odczytywanie wartości z konkretnych pól obydwu kolekcji, czyli np. jesli main wygladalby tak:

int main(){
    (...)
    TVector<SProcess> Zadania(5);
    TVector<SProcess> *wsk;
    *wsk=&Zadania;
}

To w jaki sposb przypisac lub odczytac przy uzycia wskaznika wsk wartoc np Zadania[3].r???

Może dodam jeszcze, że piszę pod linuxwm w code blocks'ie, kompilowane tymże przy użyciu gcc.

Z góry dzięki,
Kamil

Pozostało 580 znaków

2009-10-23 08:05

Rejestracja: 15 lat temu

Ostatnio: 10 godzin temu

Lokalizacja: ~Koszalin

0
    TVector<SProcess> Zadania(5);
    TVector<SProcess> *wsk;
    wsk=&Zadania; // NIE *wsk

    cout << (*wsk)[3].r; // TADA ? :)

Pozostało 580 znaków

Kamil Cierczek
2009-10-23 10:46
Kamil Cierczek
0

Późno już było i trochę niejasno się wyraziłem:P Chodzi mi o taki przypadek:

int main(){
    (...)
    TVector<SProcess> Zadania(5);
    TVector<SProcess> *wsk;
    *wsk=&Zadania;
    TVector<int> Index(5);
    TVector<int> *wsk2;
    *wsk=&Zadania;
    *wsk2=&Index;
    CFlowshop kolejka(wsk,wsk2);
}

Dalej chcę by konstruktor CFlowshop przepisywał wskaznik wsk do pola pTasks, a wskaznik wsk2 do pola pIndex:

CFlowshop::CFlowshop(TVector<SProcess> *wsk,TVector<int> *wsk2){
    this->pIndex=wsk2;
    this->pTasks=wsk;
    for(int i=0;i<(this->pIndex->GetSize());i++){
        //tu chciałbym nadawac poprzez wskaznik pIndex wszystkim pola wartosc -1, tylko nie wiem jak      
    }
}

Pytanie więc brzmi: jak przez pola klasy: pIndex i pTasks, odnosic sie do zmiennych na ktore wskazuja (wektory)??

Probowalem this->pTasks[index].r, ale dostawalem komunikat ze "r nie jest zdefiniowane w Tasks, a gdy zamienialem "." na "->" wyskakiwał komunikat, że tasks nie jest wskaźnikiem(???).

Z góry thx,
Kamil

Pozostało 580 znaków

2009-10-23 11:59

Rejestracja: 15 lat temu

Ostatnio: 10 godzin temu

Lokalizacja: ~Koszalin

0

wsk=&Zadania;
wsk2=&Index;

Tu BEZ * !!

    for(int i=0;i<(this->pIndex->GetSize());i++){
        //tu chciałbym nadawac poprzez wskaznik pIndex wszystkim pola wartosc -1, tylko nie wiem jak      
        (*pIndex)[i] = -1;
    }

    // jesli chodzi o dostep SProcess
    for(int i=0;i<(this->pTasks->GetSize());i++){
        (*pTasks)[i].r = 1;
        (*pTasks)[i].p = 2;
        (*pTasks)[i].q = 3;
    }

Czyli to co Ci pisałem poprzednio.

Pozostało 580 znaków

Odpowiedz

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