mieciox Temat założony przez niniejszego użytkownika |
[C++] problem z tablicą i pętlami » 2014-03-01 15:52:55 Witam, otóż napisałem krótki konsolowy program, listing poniżej. Szukam błędu ale nie mogę zrozumieć, co jest źle. Pojawiają mi się następujące błędy: ||=== Build: Debug in prog (compiler: GNU GCC Compiler) ===| C:\Users\PC\Desktop\prog\modul.cpp||In function 'int Wstaw(int, int, int, int)':| C:\Users\PC\Desktop\prog\modul.cpp|14|error: expected primary-expression before ')' token| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| Pytanie brzmi: co zadeklarowałem źle, może czegoś brakuje? Pół godzinę temu zacząłem przygodę z programowaniem, stąd mój stan niewiedzy. main.cpp #include <iostream> #include "wst.hpp"
int main() { std::cout << "Podaj zmienne od x1 do x4: \n" << std::endl; std::cin >> xT[ 0 ]; std::cin >> xT[ 1 ]; std::cin >> xT[ 2 ]; std::cin >> xT[ 3 ]; Wstaw( xT[ 0 ], xT[ 1 ], xT[ 2 ], xT[ 3 ] ); return 0; } wst.hpp #ifndef WST_HPP #define WST_HPP extern int xT[ 3 ]; int Wstaw( int x1, int x2, int x3, int x4 ); #endif
modul.cpp #include <iostream> #include "wst.hpp" using namespace std;
int Wstaw( int x1, int x2, int x3, int x4 ) { std::cout << "Wstawia znaki ze zmiennych od x1 do x4 \n" << std::endl; for( int x = 1; x <= 4; x++ ) { for( int xx = 0; xx <= xT[ x ]; xx + ) { cout << "#"; } std::cout << std::endl; } return 0; } |
|
jmaciejjjj7 |
» 2014-03-01 16:20:12 Dlaczego skoro używasz using namespace std to nadal piszesz np. std::cout ? Tym poleceniem mówisz kompilatorowi, że domyślnie będziesz uźywał przestrzeni nazw std to znaczy, że jak napiszesz using namespace std , a potem cout to kompilator już wie, że Ci chodzi o std::cout . |
|
oputyk |
» 2014-03-01 16:20:16 A spróbuj zamienić nazwę z 'wst.hpp' na 'modul.h'. PS: for( int xx = 0; xx <= xT[ x ]; xx + ) { cout << "#"; }
Zamień na: for( int xx = 0; xx <= xT[ x ]; xx++ ) { cout << "#"; }
|
|
oputyk |
» 2014-03-01 16:42:08 for( int x = 1; x <= 4; x++ ) { for( int xx = 0; xx <= xT[ x ]; xx + ) { cout << "#"; } std::cout << std::endl; }
zamień na for( int x = 0; x < 4; x++ ) { for( int xx = 0; xx < xT[ x ]; xx + ) { cout << "#"; } std::cout << std::endl; }
|
|
mieciox Temat założony przez niniejszego użytkownika |
» 2014-03-01 20:21:52 Przepraszam, że nie odpowiadałem dłuższy czas - odcięli mi Internet. @jmaciejjjj7 - racja, ale tak już zostało i nie edytowałem posta.
Zaraz sprawdzę i napiszę co i jak.
----- Pokazały mi się następujące komunikaty ||=== Build: Debug in tytul (compiler: GNU GCC Compiler) ===| C:\Users\PC\Desktop\prog\modul.cpp||In function 'int Wstaw(int, int, int, int)':| C:\Users\PC\Desktop\prog\modul.cpp|13|error: expected primary-expression before ')' token| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
13 linia - > for( int xx = 0; xx < xT[ x ]; xx ++ ) Naprawione, brak plusa w ikrementacji. Dzięki oputyk, wszystkie zabiegi podane przez ciebie podziałały.
----- Teraz pojawił się ostatni problem, a mianowicie tyczy się zmiennej globalnej xT, która jest z kolei tablicą składającą się z 4 elementów: Problem dotyka tego fragmnetu kodu: linia 7 std::cin >> xT[0]; linia 8 std::cin >> xT[1]; linia 9 std::cin >> xT[2]; linia 10 std::cin >> xT[3]; linia 11 linia 12 Wstaw(xT[0], xT[1], xT[2], xT[3]);
||=== Build: Debug in tytul (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function `main':| C:\Users\PC\Desktop\prog\main.cpp|7|undefined reference to `xT'| C:\Users\PC\Desktop\prog\main.cpp|8|undefined reference to `xT'| C:\Users\PC\Desktop\prog\main.cpp|9|undefined reference to `xT'| C:\Users\PC\Desktop\prog\main.cpp|10|undefined reference to `xT'| C:\Users\PC\Desktop\prog\main.cpp|12|undefined reference to `xT'| obj\Debug\main.o:C:\Users\PC\Desktop\prog\main.cpp|12|more undefined references to `xT' follow| ||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| |
|
oputyk |
» 2014-03-01 21:11:14 Dodam, że indeks nie może być większy od wielkości tablicy, czyli jeżeli zdefiniowałeś tablicę cztero-elementową, to możesz najwyżej podać indeks od 0 do 3 (nie więcej, bo będzie błąd). Musisz zdefiniować tablicę! - Wejdź sobie tutaj - Tablice jednowymiarowe.. |
|
mieciox Temat założony przez niniejszego użytkownika |
» 2014-03-01 21:18:25 No tak, ale zapodałem prototyp tablicy w nagłówku - > extern int xT[4]; Nie jest to wystarczający zabieg? Ma zasięg globalny. Jak coś to wyprowadź mnie z błędu. Może źle kumam.
------ Dobra, działa. Musiałem dołączyć do pliku main, przed ową funkcją int xT[4];, chociaż nie wiem dlaczego. Mógłbyś mi to wytłumaczyć? Może nie rozumiem wystarczająco działań na zmiennych globalnych? |
|
oputyk |
» 2014-03-01 21:26:31 int zmienna_globalna = 1; int main() { int zmienna_lokalna = 1; }
|
|
« 1 » 2 |