mkami Temat założony przez niniejszego użytkownika |
edycja i usuwanie elementów vectora » 2016-04-10 11:37:52 Witam! Mam problem z edycją oraz usuwaniem konkretnego elementu vectora. Mianowicie stworzyłem bazę danych opartą na klasie i vectorze w którym zapisuje kolejne obiekty, w programie mam funckje która znajduje dane obiekty wg wybranego kryterium i je wyświetla. Następnie mogę wybrać który element mam usunąc, bądz edytować . Problem występuje po wybraniu konkretnego elementu - wyskakuje mi wtedy Debug Assertion Failed "vector subscript out of range"
Mam też problem z pierwszym elementem tego vectora, do którego jakby nie mam dostępu i zawsze jest pusty..., trochę poczytałem i myślałem że jest to spowodowane korzystaniem z funkcji push_back która dodaje element na końcu vectora i niby na "czystym, niewypełnionym vectorze" tym końcem jest jego drugi element.
Z góry dzieki za pomoc! |
|
jankowalski25 |
» 2016-04-10 12:01:52 wyskakuje mi wtedy "vector subscript out of range" |
Pierwszy link: [C++]Vector subscript out of rangeCzyli "indeks wektora poza zasięgiem". Sprawdź, do jakich indeksów się odwołujesz i w którym miejscu wychodzisz poza zakres. |
|
mkami Temat założony przez niniejszego użytkownika |
odp » 2016-04-10 12:19:06 Problem rozwiązany , indeks w vectorze nie zgadzał się z tym wyświetlanym na ekranie - przez to powstawał ten problem , W swoim programie baza[pam[nr+1]].imie = imie1; niepotrzebnie dodawałem tą jedynke do indeksu w nawiasie kwadratowym
Dzięki za pomoc!
A co powiecie o drugim problemie? ""Mam też problem z pierwszym elementem tego vectora, do którego jakby nie mam dostępu i zawsze jest pusty..., trochę poczytałem i myślałem że jest to spowodowane korzystaniem z funkcji push_back która dodaje element na końcu vectora i niby na "czystym, niewypełnionym vectorze" tym końcem jest jego drugi element. ""
|
|
jankowalski25 |
Nie musisz wypełniać pola "tytuł", jeśli nie zakładasz nowego tematu » 2016-04-10 12:22:18 Czy pamiętasz o tym, że pierwszym indeksem jest zero? W jaki sposób próbujesz odwołać się do pierwszego elementu? Dopisano:Jaki wynik otrzymujesz po zastosowaniu iteratorów? |
|
mkami Temat założony przez niniejszego użytkownika |
odp » 2016-04-10 12:44:54 Właśnie zauważyłem że to juz przy tworzeniu nowej bazy powstaje ten problem. Tworze ją tą funkcją:
void nowa_baza(void) { spis_osob.clear(); string imie1, nazwisko1,wiek1; ifstream file("baza.txt", ios::in); getline(file, imie1, ' '); getline(file, nazwisko1, ' '); getline(file, wiek1, ' '); osoba *pam; pam = new osoba(imie1, nazwisko1,wiek1); spis_osob.push_back(*pam); delete pam;
Może tu jest błąd, rzuć na to okiem. |
|
jankowalski25 |
» 2016-04-10 12:46:41 Nie usuwasz przypadkiem pierwszego elementu?W porządku, wyłuskujesz wskaźnik w trakcie dodawania do wektora. Ale w takim razie nie prościej napisać: spis_osob.push_back( osoba( imie1, nazwisko1, wiek1 ) ); |
|
mkami Temat założony przez niniejszego użytkownika |
odp » 2016-04-10 12:54:00 To znaczy ta funkcja ma za zadanie albo stworzyć nową bazę , gdy plik txt nie istnieje albo wyczyścić zawartość istniejącego pliku txt.
Chyba nie, jak usunę delete pam; z kodu programu to problem dalej występuje :/
|
|
Monika90 |
» 2016-04-10 12:56:39 Twoja funkcja zawsze dodaje jeden element do wektora, gdy plik jest pusty lub nie istnieje, to doda pusty element. |
|
« 1 » 2 |