Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] problem z tablicą i pętlami

Ostatnio zmodyfikowano 2014-03-01 21:44
Autor Wiadomość
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
C/C++
#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
C/C++
#ifndef WST_HPP
#define WST_HPP
extern int xT[ 3 ];
int Wstaw( int x1, int x2, int x3, int x4 );
#endif // WST_HPP
modul.cpp
C/C++
#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++ ) //x++ bedzie zwiekszac wartosc x za kazdym przejsciem petli o 1
    {
       
       
        for( int xx = 0; xx <= xT[ x ]; xx + )
        {
            cout << "#";
           
        }
       
        std::cout << std::endl;
       
    }
   
    return 0;
   
}
P-105447
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
.
P-105450
oputyk
» 2014-03-01 16:20:16
A spróbuj zamienić nazwę z 'wst.hpp' na 'modul.h'.

PS:
C/C++
for( int xx = 0; xx <= xT[ x ]; xx + )
{
    cout << "#";
   
}
Zamień na:
C/C++
for( int xx = 0; xx <= xT[ x ]; xx++ )
{
    cout << "#";
   
}
P-105451
oputyk
» 2014-03-01 16:42:08
C/C++
for( int x = 1; x <= 4; x++ ) //x++ bedzie zwiekszac wartosc x za kazdym przejsciem petli o 1
{
   
   
    for( int xx = 0; xx <= xT[ x ]; xx + )
    {
        cout << "#";
       
    }
   
    std::cout << std::endl;
   
}
zamień na
C/C++
for( int x = 0; x < 4; x++ ) //x++ bedzie zwiekszac wartosc x za kazdym przejsciem petli o 1
{
   
   
    for( int xx = 0; xx < xT[ x ]; xx + )
    {
        cout << "#";
       
    }
   
    std::cout << std::endl;
   
}
P-105456
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)) ===|
 
P-105459
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..
P-105462
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?
P-105464
oputyk
» 2014-03-01 21:26:31
C/C++
int zmienna_globalna = 1;
int main()
{
    int zmienna_lokalna = 1;
}
P-105465
« 1 » 2
  Strona 1 z 2 Następna strona