Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

[C++] Bus error 10 w metodzie wywolanej na podstawie zwroconej referencji


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 macsurf

macsurf
  • 104 postów
  • SkądKołobrzeg

Napisano 15 lutego 2015 - 14:18

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 :/

 

 






Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych