Wyświetlenie elementów vectora w wirtualnej metodzie.

Wyświetlenie elementów vectora w wirtualnej metodzie.
P1
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:179
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:

Kopiuj
#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.

edytowany 1x, ostatnio: pestka12
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:19 dni
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?

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
ZD
Ale go rozjeżdżasz . w guglu tak było.
_13th_Dragon
Skasować gugola!
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:6 dni
  • Lokalizacja:Szczecin
3

Taka zagadka:

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

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

ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
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ż.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 1x, ostatnio: ZrobieDobrze
P1
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:179
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.