Problem z dostępem do wektora w innej klasie.

0

Witam
Mam taki problem. Mam dwie klasy załóżmy klasę A i klasę B oraz jest też klasa C. W klasie B mam vector. Klasa A jest przyjacielem klasy B.

klasaA.h
 
class A
{
  public:
  void dodaj_do_vectora(B& obiekt);
  A();
  ~A();
};

KlasaA.cpp
A::dodaj_do_vectora(B& obiekt)
{
  obiekt.wektor.push_back(new C); // to nie chce działać wyskakują błędy.
}
 
KlasaB.h
class B
{
    vector<C*> wektor;
   public:
   friend class A;
    B();
   ~B();
};
 
KlasaC.h
class C
{
   //jakies metody;
  public:
   C();
   ~C();
};

Błędy:
expected type-specifier before 'C';
expected ')' before 'C';
no matching function for call to std::vector<C*, std::allocator<C*> > push_back(int*);

to jest taki model problemu. bo dzieje się to w moim bardziej rozbudowanym programie.
Z góry dziękuję za pomoc.

0
A::dodaj_do_vectora(B& obiekt)
{
  obiekt.wektor.push_back(new C); // to nie chce działać wyskakują błędy.
}

a gdzie typ zwracany przez metodę?
Poza tym przy deklaracji vector'a operujesz w przestrzeni std?
Sprawdź również czy masz dobrze includy porobione w odpowiednich plikach.

0
  1. w KlasaA.cpp naruszasz enkapsulację!

  2. KlasaB.h

class C;

class B
{
    vector<C*> wektor;
public:
   friend class A;
    B();
   ~B();
    void dodajNowyObiekt();
};

KlasaB.cpp

#inlude "KlasaC.h"

...
0

dobra napiszę fragmenty kodu mojego programu z wszystkimi includami...tak chyba będzie najlepiej(skopiowane)

interfejs_uzytkownika.h

#include "magazyn.h"
#include "zamowienie.h"
#include <vecotr>

using namespace std;

class interfejs_uzytkownika
{
    .....
public:
    void zamowienie(magazyn& obiekt);//
    interfejs_uzytkownika();
    ~interfejs_uzytkownika();
};

interfejs_uzytkownika.cpp

#include "interfejs_uzytkownika.h"

void interfejs_uzytkownika::zamowienie(magazyn& obiekt)
{
      obiekt.zamowienia.push_back(new zamowienie);    //to nie działa
      ....
      return;
}
 
 
magazyn.h

#include "interfejs_uzytkownika.h"
#include "zamowienie.h"
#include <vector>

using namespace std;

class magazyn
{
    vector<zamowienie*> zamowienia;
public:
    friend class interfejs_uzytkownika;
    magazyn();
    ~magazyn();
};
 
zamowienie.h

#include <string>

using namespace std;

class zamowienie
{
    unsigned numer_zamowienia;
    bool czy_faktura;
    enum typ_zamowienia typ;
    string nazwa_firmy;
    string imie_nazwisko;
public:
    zamowienie();
    ~zamowienie();
};

Błędy:

expected type-specifier before 'zamowienie';
expected ')' before 'zamowienie';
no matching function for call to std::vector<zamowienie*, std::allocator<zamowienie*> > push_back(int*);

0
  1. jeszcze raz: nie powinno się operować bezpośrednio na polach innej klasy! Na dodatek próbujesz to robić na polu prywatnym!
  2. poza tym poczytaj o tym.

Czyli tak bym poprawił:

interfejs_uzytkownika.h

// #include "magazyn.h" // niepotrzebne
class magazyn;

// #include "zamowienie.h" // niepotrzebne
// #include <vecotr> // niepotrzebne
 
using namespace std;
 
class interfejs_uzytkownika
{
    .....
public:
    void zamowienie(magazyn& obiekt);//
    interfejs_uzytkownika();
    ~interfejs_uzytkownika();
};

interfejs_uzytkownika.cpp

#include "interfejs_uzytkownika.h"
#include "magazyn.h"
 
void interfejs_uzytkownika::zamowienie(magazyn& obiekt)
{
      // obiekt.zamowienia.push_back(new zamowienie);    // tu naruszasz pole prywatne
      magazyn.dodajZamowienie(); // takie podejście z nowa metoda jest lepsze
      ....
      return;
}

magazyn.h

// #include "interfejs_uzytkownika.h" // po co?
// #include "zamowienie.h" // niepotrzebne
class zamowienie;

#include <vector>
 
using namespace std;
 
class magazyn
{
    vector<zamowienie*> zamowienia;
public:
    friend class interfejs_uzytkownika;
    void dodajZamowienie(); // nowa metoda
    magazyn();
    ~magazyn();
};

zamowienie.h

#include <string>
 
using namespace std;
 
class zamowienie
{
    unsigned numer_zamowienia;
    bool czy_faktura;
    enum typ_zamowienia typ;
    string nazwa_firmy;
    string imie_nazwisko;
public:
    zamowienie();
    ~zamowienie();
};
0

Acha dzięki bardzo za pomoc. Tylko jedno pytanie jeszcze... w interfejs_uzytkownika.cpp
można dać:
obiekt.dodajZamowienie(); ?

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