"invalid types 'double[int]' for array subscript" przy próbie kompilowania

0

Dzień dobry.

Jeżeli nie sprawi to kłopotu, bardzo proszę o drobną pomoc z programem od interpolacji, który staram się napisać.

Od czasu mojego ostatniego tematu bardzo starałem się naprawić błąd w programie od interpolacji, więc chciałem osobno przetestować wszelkie metody znalezione w internecie, ale chwilowo nie byłem nawet w stanie uruchomić tych programów.

W programie, który dołączyłem do postu, przy próbie kompilacji, otrzymuję błąd "invalid types 'double[int]' for array subscript" dla funkcji "newton_l()" (zwykłe podstawienie wartości z jednej tablicy do drugiej), za to przy próbie uruchomienia funkcji "newton()" program kompiluje się, ale otrzymuję błąd o następującej treści:

user image

którego znaczenia nie rozumiem.

Jeżeli ktoś mógłby wytłumaczyć mi, gdzie leży program i jak temu zaradzić, byłbym bardzo wdzięczny.

Dziękuję za wszelką pomoc i przepraszam za kłopot.

0

Nie można tak tworzyć tablic jak tam zrobiłeś. Użyj new lub wektorów.

0
winerfresh napisał(a):

Nie można tak tworzyć tablic jak tam zrobiłeś. Użyj new lub wektorów.

To znaczy których tablic? I dlaczego?

W funkcji "newton()" a[] jest zdefiniowane jako "double *a=new double[size];", właściwie tylko dlatego, że tak było w książce (posiłkuję się "Metody numeryczne w c++", Paweł Mikołajczak - http://informatyka.umcs.lublin.pl/files/mikolajczak_metody_numeryczne_w_cpp.pdf ) - sam pewnie nigdy nie zrozumiem wskaźników, a tutaj i tak przecież tablica utworzona wewnątrz funkcji po jej wykonaniu i tak będzie usunięta.

1

Błąd jest w newton_l - jeżeli nie ma VLA to tak tablic nie można tworzyć. Rozmiar tablic na stosie musi być znany w czasie kompilacji. Pewnie używasz GCC, więc to akurat nie będzie tu błędem.

Inny błąd też w newton_l. Przekazujesz jej double, a próbujesz używać jak tablicy. Pewnie * zjadłeś.

0
byku_guzio napisał(a):

Błąd jest w newton_l - jeżeli nie ma VLA to tak tablic nie można tworzyć. Rozmiar tablic na stosie musi być znany w czasie kompilacji. Pewnie używasz GCC, więc to akurat nie będzie tu błędem.

Inny błąd też w newton_l. Przekazujesz jej double, a próbujesz używać jak tablicy. Pewnie * zjadłeś.

Używam to pisania programu "Dev C++", więc pewnie właśnie GCC. Jeżeli chodzi o argument - teraz widzę, że pomyliłem się przy nazywaniu zmiennych wewnątrz funkcji, bo x to też wektor globalny.

Pozostaje jednak problem tego drugiego komunikatu, który pojawia się w przypadku funkcji "newton()". Pierwszy raz coś takiego zobaczyłem, a nie umiem posługiwać się wskaźnikami. Czy program próbuje zająć zbyt dużo pamięci przy próbie przekazania całego wektora jako argumentu?

0

Być może, przekazuj wektory przez referencje.

0
byku_guzio napisał(a):

Być może, przekazuj wektory przez referencje.

Spróbowałem zadeklarować funkcję newton() w taki sposób:

double newton(const vector<double>& xb, const vector<double>& yb, int size, double inx)

oraz

double newton(const vector<double>* xb, const vector<double>* yb, int size, double inx)

W obu przypadkach wciąż pokazuje ten sam błąd:

what<>: std::bad_alloc

dodanie znaczników <code class="cpp"> i <quote> - fp

1 użytkowników online, w tym zalogowanych: 0, gości: 1