Wyświetlenie elementów vectora w wirtualnej metodzie.

0

Witam serdecznie wszystkich.

Ostatnio siedzę nad projektem i pojawił się problem taki jak w tytule. Chcę wyświetlić elementy vectora w metodzie dzieziczonej wirtualnie.
Przykładowy kod z mojego programu:

#include<iostream>
using namespace std;

class Object
{
public:
  virtual void Show()=0;
  size_t Calculate(uint8_t *data);
};

class Package:public Object
{
uint8_t One;
uint8_t Two;
vector<string>ListArg;
public:
   Package(uint8_t LOne);
   void Show()override;
};

class Name:public Object
{
string TitleName;
Object *wsk;
public:
   void Show()override;
   void SetPackage(Package obj);
};

void Name::Show()
{
cout<<" Name("<<this->TitleName<<",";
this->wsk->Show();
cout<<")"<<endl;
}
void Name::SetPackage(Package obj)
{
this->wsk=&obj;
}

Package::Package(uint8_t LOne)
{
this->One=LOne;
this->Two=3;

for(int i=0;i<static_cast<int>(this->Two);i++)
{
  string tekst="Test";
  this->ListArg.push_back(tekst);
}

}

void Package::Show()
{
cout<<" Package("<<"0x"<<hex<<static_cast<int>(this->Two)<<")";

for(auto &arg:ListArg)
{
 cout<<arg<<endl; // Tu wyrzuca mi Segmentation Fault.
}

}

int main()
{
  Name a;
  Pakcage pack(12);
  a.SetPackage(pack);
  a.Show();
}

Bardzo dziękuję za każdą pomoc i jeśli coś będzie jeszcze potrzebne to proszę pisać.

Życzę miłego dnia.

5
  1. http://forum.4programmers.net/998482
  2. http://forum.4programmers.net/1101404
  3. Bez sensu konwertować górną granicę iteratora <static_cast<int>(this->Two), ba na każdym kroku pętli jeżeli możesz iterator zrobić kompatybilnego typu for(uint8_t i=0;i<Two;++i)
  4. Korzystaj z listy inicjalizacyjnej konstruktorów: Package::Package(uint8_t One):One(One),Two(3) { for(uint8_t i=0;i<Two;++i) ListArg.push_back("Test"); }
  5. void SetPackage(Package &obj) i odpowiednio void Name::SetPackage(Package &obj)
  6. Nie popełniłbyś takiego błędu gdyby było void SetPackage(Package *obj) czyli kompatybilne z Object *wsk;
  7. Weź się zastanów nad nazewnictwem zmiennych: wsk=obj; ta operacja nic nie mówi.
  8. Nie wsadzaj this w każdą dziurę.
  9. Pakcage pack(12); jakim cudem ci to kompilowało?
3

Taka zagadka:

void foo(int x)
{
    x = 42;
}

int main()
{
    int y = 0;
    foo(y);
    // jaka jest wartość y?
}
0

próbuję zrozumieć zamysł, co ta grupa klas by miała robić ... Albo za mało wypiłem kawy, albo ty za dużo czegoś innego

pestka12 napisał(a):

void Name::SetPackage(Package obj)
{
this->wsk=&obj;
}

nagroda Nobla ... albo Darwina.
Za ChRL nie rozumiem po co lewa strona (co chciał poeta używając wskaźnika) ani jaka jest przydatność prawej (adres zmiennej tymczasowej)

Nie będę szczegółowo komentował reszty kodu.
Konstruktor, który nie konstruuje itd (kolega w sąsiednim wątku to twój brat bliżniak ?)

Życzę miłego dnia.

Również.

0

Dziękuję za każdą pomoc oraz radę. Na początek piszę program a później optymalizacja ale chociaż jak to napisał pewien autor książki " Czas na napisanie optymalnego kodu jest taki sam jak pisanie nieoptymalnego". Problem rozwiązany i temat do zamknięcia.

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