Mam problem ze skopiowaniem znakow do tablicy za pomoca strcpy() chociaż nie można mieć tutaj zdawałoby się żadnych problemów bo miliony razy z tego korzystałem. Ale problem pojawia się tylko wtedy kiedy wywołuję metodę, która jest wywoływana na rzecz zwróconej referencji z innej metody tego samego obiektu. Przykład:
people[0]->init(weapons).setFullName("John", "Rambo");
Gdzie people[0] to klasa Soldier pochodna po abstrakcyjnej klasie Person.
Tutaj pojawi się buss error 10
Wywolanie bezposrenie dziala bez problemów: people[0]->setFullName("X", "Y")
Poniżej jest metoda klasy abstrakcyjnej, nie ma tutaj nic nadzwyczajnego, ale strcpy() nie moze skopiowac tak jakby name i surname nie mialy przydzielonej pamieci !!! A ta pamięć jest na 100% przydzielona co wynika z odczytu sizeof().
void setFullName(const char* cname, const char* csurname) { cout << "name: " << cname << " surname: " << csurname << " sizeof: " << sizeof(name) << " / " << sizeof(surname) << endl; strcpy(name, cname); strcpy(surname, csurname); }
Metoda init() jest w klasie abstrakcyjej metodą czysto wirtualną zwracającą referencje na Person & w klasach pochodnych zwracana referencja jest uzależniona od klasy pochodnej. I tu jest właśnie problem, wywołanie init(void * ptr).setFullName(const char* n, const char* s) nie jest w stanie skopiowac danych z argumentów do składowej klasy pochodnej, które są odziedziczone po klasie abstrakcyjnej ( name i surname ).
To jakiś absurd :/