Witam, podczas kompilacji niektórych kodów napsianych przeze mnie nie ma żadnych błędów, jednak jak uruchamiam aplikację na komputerze to wyskakuje raport o błędach systemu windows. Wie ktoś może o co chodzi ? A m. in. wyskakuje mi przy przypisaniu zmiennej rozmiaru wektora czyli np. mam:
vector costam;
int i=costam.size();
Wlasnie po dodaniu mniej wiecej takiego kodu wyskakuje mi pozniej raportowanie o błędach (a kompilator nie wykrywa błędów - używam Dev CPP).
I nie chodzi mi tutaj o jakieś inne rozwiązanie bo miałem jeszcze kiedyś niewyjaśnione błędy. Poprostu mam pytanie czemu tak sie dzieje, przecież operator size() zwraca wartość całkowitą więc przypisanie jej do zmiennej typu int nie powinno sprawiać problemu…
No nie dziwię się, że ten kod się wywala, jest totalne bez sensu i błędny. Wywala się bo odnosisz się do wektora “b” w którym nic nie ma. Resztę kodu przemilczę…
Nie rozumiem o jaką inicjalizację chodzi, jak np. zrobie tak:
vector b=0;
to kompilator zwraca błąd. Sory, musiałe mna nowo pisac ten kod i zapomniałem czegoś dodać, teraz daje już kompletny, bo faktycznie wektor nic nie zawierał wyżej
#include
#include
#include
#include
using namespace std;
int main()
{
string a,c;
vector b;
ifstream in("text.txt");
while(getline(in,a))
{
b.push_back(a);
for (int i=b.size();i>=0;i--)
cout<
}
return 0;
}
[/code]
Kompilator łyka, ale znów wywala błąd, i to jeszcze jakieś dźwięki dają się we znaki, no ale z tym push_back już dodałem, bo zapomniałem tego napisać, wyżej jest mój poprawiony kod. No i nadal moje pytanie brzmi czemu to jest błędne, skoro kompilator nie zwraca błędu ?
Niestety nie… kompilator zglosił błąd a jak zmieniłem na cout<
Gryphoon innych sposobów i tak nie rozumiem, chce tylko wiedzieć czemu nie idzie przypisywać tych danych size(), bo jak robiłem w odwrotną stronę (chciałem wyświetlić wektor z inkrementacją od i=0 do size() to było wszystko ok, tylko jak już dekrementuje i zaczynam od i=b.size() to wywala ten błąd i właśnie tylko to mnie zastanawia czemu tak jest… Czy to jest błędny kod ?
Teraz nie wyskakuje żaden błąd ale działa nie tak jak chciałem, wczytuje od poczatku wektor a nie od końca i jeszcze po kilka razy… Ale dobra dzięki za pomoc, nie do końca rozumiem jak działają te wektory, skoro wczytuje za pomocą push_back() linie z pliku np. o takiej zawartości:
linia 1
linia 2
linia 3
To np. b[0] zawierac bedzie “linia 1” itd… tak ? to nie rozumiem jak wychodze poza wektor, ale dobra jak nie chce ci sie tłumaczyć to się nie męcz, dzięki za pomoc.
tworze wektor, i za kazdym razem wczytuje do niego nowy wers, więc tworzy się nowa “tablica”, nie wiem o jakim zerowaniu piszesz, może ja o czymś nie wiem ale myśle sobie że przecież za każdym razem wektor dodaje nowe miejsce więc jak bym miał go nawet zerować (chociaż nie wiem jak to sie robi) to znów by te “tablice” sie powtarzały… Czyli jak to ma wyglądać ? Wczyta sie coś np. do b[0] i zaraz jak wyzeruje to znów będzie wczytywało tekst w to samo miejsce ? czyli po raz drugi będzie coś wczytywane do b[0] ?
while(getline(in,a)) //tu bierzesz linia po linii z pliku i wstawiasz do a
{
b.push_back(a); //tu DODAJESZ a do kolekcji b
for (int i=b.size();i>=0;i--)
cout<
}
[/code]
Efekt? Jesli plik zawiera cos takiego:
Już wiem o co chodzi z tym wczytywaniem, dałem pętlę for za pętlą while i jest ok twoim sposobem:
for (int i=b.size()-1;i>=0;i--)
Tylko nie rozumiem dlaczego tak jest poprostu. Bo przecież incijalizacja i następuje tylko raz, jest jej przypisywana wartość początkowa o tyle, a w dalszej części pętli jest ta wartość inkrementowana... to dlaczego jednak z tym "-1" działa ?
Jak juz pisalem pare postow wyzej - wyskakujesz poza wektor. Jeden z najpopularniejszych bledow, jakie sie spotyka w programach pisanych w C/C++ - indeksowanie poza tablice.
Dorzuc do kodu linie, aby Ci wyrzucil na ekran wartosci “i” oraz “b.size()” w kazdym kroku - zobaczysz.