Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.722.705
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Učim statičke članove razreda i imam mali problem. Imam ovaj kod:

#include <iostream>

using namespace std;

class test{
public:
    static int b;
};

int test::b = 0;

int main(){
    test::b=5;
    test.b=6;
    return 0;
}
Problem mi je u pristupu statickome članu. Naime kada pristupim sa: test::b onda sve radi, no kad pristupam sa test.b onda mi compiler da poruku o pogrešci:

oop.cpp: In function ‘int main()’:
oop.cpp:13:6: error: expected unqualified-id before ‘.’ token
A ovo su mi specifikacije compilera:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu)

Twitter- @capttawish Linux/GNU live forever.
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
e_77 kaže...

Sve je to meni jasno..Pa napravila sam vecinu koda...Jel mi mozes pomoc konkretno?Sto nije u redu s ovim boldanim u mom kodu?

Jesi li sigurna da nesto nije u redu? Nemam pthreads instaliran, ali gledajuci po tvom kôdu sve se cini ok, citao sam i dokumentaciju za pthreads i sve mi djeluje uredno, osim ovog dijela:

 

int t1=pthread_create(&tid1, NULL, produkt_komponenata_vektora, (void*)start);

Trebalo bi ici:

 

int t1=pthread_create(&tid1, NULL, produkt_komponenata_vektora, (void*)&start);

 

Jel ti se kôd uspjesno kompajlira?

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

izgleda da je sad sve u redu..ne mogu vjerovat da je samo u tome bio problem..hvala

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
Problem mi je u pristupu statickome članu. Naime kada pristupim sa: test::b onda sve radi, no kad pristupam sa test.b onda mi compiler da poruku o pogrešci

Tocku koristis samo kada pristupas clanovima instance neke klase (tj. clanovima nekog objekta), ti ovdje ne ne pristupas clanu objekta nego clanu klase. Ne znam kako bih ti to bolje objasnio.

 

Mozda ce ti ovo pojasniti razliku:

 

#include <iostream>

using namespace std;

class test{
public:
    static int b;
};

int test::b = 0;

int main(){
   test t;
   
   test::b=5;
   t.b=6;
    return 0;
}

 

Pogledaj ovdje:

http://stackoverflow.com/questions/10430147/error-expected-unqualified-id-before-token

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put ned 6.5.2012 17:28 (rustweaver).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
e_77 kaže...

izgleda da je sad sve u redu..ne mogu vjerovat da je samo u tome bio problem..hvala

Stvar je u tome sto se u funkciju nekog threada argumenti tipicno proslijede kao pokazivaci, i ti si ih u funkciji dereferencirala kao da se radi o pokazivacima, a zapravo si ih bila proslijedivala direktno kao vrijednost. Ako ti to nesto znaci...

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
Problem mi je u pristupu statickome članu. Naime kada pristupim sa: test::b onda sve radi, no kad pristupam sa test.bonda mi compiler da poruku o pogrešci:

 

rustweaver kaže...
captain_soap_McTawish kaže...
Problem mi je u pristupu statickome članu. Naime kada pristupim sa: test::b onda sve radi, no kad pristupam sa test.b onda mi compiler da poruku o pogrešci

Tocku koristis samo kada pristupas clanovima instance neke klase (tj. clanovima nekog objekta), ti ovdje ne ne pristupas clanu objekta nego clanu klase. Ne znam kako bih ti to bolje objasnio.

 

Vidim da ne razumijete baš što je to statički član klase.. Znači, to nije obični član. On se dijeli između instanci (umjesto da svaka instanca ima svoju kopiju tog člana) te se stoga ne može koristiti točka (.) za pristup (jer nije vlasništvo isključivo jednog objekta) već scope operator (::). Stoga, to jest pristup članu objekta, ali dijeljenom članu (pa zato "::" umjesto ".").

 

17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
Vidim da ne razumijete baš što je to statički član klase.. Znači, to nije obični član. On se dijeli između instanci (umjesto da svaka instanca ima svoju kopiju tog člana) te se stoga ne može koristiti točka (.) za pristup (jer nije vlasništvo isključivo jednog objekta) već scope operator (::). Stoga, to jest pristup članu objekta, ali dijeljenom članu (pa zato "::" umjesto ".").

Jel se moze povuci paralela s Javom, u Javi za staticke metode i varijable ne trebam uopce stvarati instancu klase, a u C++-u (posto kazes da se dijeli izmedu instanci klase)?

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
Poruka je uređivana zadnji put ned 6.5.2012 20:01 (1domagoj1).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
Vidim da ne razumijete baš što je to statički član klase.. Znači, to nije obični član. On se dijeli između instanci

Pa na istu foru kao i sa statickim varijablama unutar funkcija cija vrijednost ostaje sacuvana izmedu dva razlicita poziva na funkciju. ne? A ovo s tockom i dvostrukom dvotockom znas bolje od mene, u to se ne bih petljao... :D

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...
TracerCPP kaže...
Vidim da ne razumijete baš što je to statički član klase.. Znači, to nije obični član. On se dijeli između instanci (umjesto da svaka instanca ima svoju kopiju tog člana) te se stoga ne može koristiti točka (.) za pristup (jer nije vlasništvo isključivo jednog objekta) već scope operator (::). Stoga, to jest pristup članu objekta, ali dijeljenom članu (pa zato "::" umjesto ".").

Jel se moze povuci paralela s Javom, u Javi za staticke metode i varijable ne trebam uopce stvarati instancu klase, a u C++-u (posto kazes da se dijeli izmedu instanci klase)?

Tako je. I ovdje se statičke metode pozivaju bez navođenja instance.

 

#include <iostream>
using namespace std;

class A{
    private:
    static int N;
    public:
    static int VratiN(){
       return N;
    }
    static void PostaviN(int x){
       N = x;
    }
};
int A::N = 0;
int main(){
    cout << A::VratiN(); // 0
    A::PostaviN(5);
    cout << A::VratiN(); // 5
    return 0;
}

 

rustweaver kaže...
TracerCPP kaže...
Vidim da ne razumijete baš što je to statički član klase.. Znači, to nije obični član. On se dijeli između instanci

Pa na istu foru kao i sa statickim varijablama unutar funkcija cija vrijednost ostaje sacuvana izmedu dva razlicita poziva na funkciju. ne?

Statička varijabla funkcije se ponaša kao globalna varijabla dok je statička varijabla klase dostupna samo unutar klase i dijeljena među instancama.

Poruka je uređivana zadnji put ned 6.5.2012 20:33 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
Statička varijabla funkcije se ponaša kao globalna varijabla dok je statička varijabla klase dostupna samo unutar klase i dijeljena među instancama.

Zbilja? Znaci mogu iz jedne funkcije pristupati statickoj varijabli druge funkcije?

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
TracerCPP kaže...
Statička varijabla funkcije se ponaša kao globalna varijabla dok je statička varijabla klase dostupna samo unutar klase i dijeljena među instancama.

Zbilja? Znaci mogu iz jedne funkcije pristupati statickoj varijabli druge funkcije?

Iskreno, nisam probao da li bi to prošlo no mislim da ne bi trebalo biti problema pošto se ta varijabla ne uništava nakon završetka poziva funkcije.

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Iskreno, nisam probao da li bi to prošlo no mislim da ne bi trebalo biti problema pošto se ta varijabla ne uništava nakon završetka poziva funkcije.

Jok, sad sam provjerio. Nebu islo. Sto u biti i ima smisla, jer u suprotnom staticke varijable ne bi imale smisao za postojanje ako bi se isto ponasale kao globalne.

 

Jedino da izvuces pointer na tu varijablu i onda preko njega izvan scopea mijenjas vrijednost originalne varijable. Ali to pretpostavljam mozes i sa statickim clanovima klasa u C++u.

 

Evo ako nekog zanima:

 

void funkcija1()
{
     static int broj1=20;
}

void funkcija2()
{
     broj1+=5;
}

int main()
{
    return 0;
}

I error:

`broj1' undeclared (first use in this function)

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put ned 6.5.2012 20:45 (rustweaver).
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

BTW. Može li mi netko pojasniti što je specifično kad varijable deklariramo u globalnom području kao statičke?

Twitter- @capttawish Linux/GNU live forever.
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Mislim da si krivo shvatio. Jasno da ne možeš tako pristupiti toj varijabli jer u drugoj funkciji nije vidljiva. Kad kažem "globalna" tada mislim na to da neće uništena nakon poziva funkcije (kao ostale lokalne varijable koje su na stog-u).

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Mislim da si krivo shvatio. Jasno da ne možeš tako pristupiti toj varijabli jer u drugoj funkciji nije vidljiva. Kad kažem "globalna" tada mislim na to da neće uništena nakon poziva funkcije (kao ostale lokalne varijable koje su na stog-u).

Onda te jesam krivo shvatio, jer ja pod "globalna varijabla" podrazumjevam varijablu koja je vidljiva svugdje. My bad.

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
protjeran
offline
Programiranje u C++-u - pitanja i odgovori

Može li mi netko objasniti sta ovaj kod radi?

Bilo koji zadatak a najbolje bi bilo sve :D

 

---------------------------------------------------------------------------------------

 

 

#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
//Funkcija za zadatak 1
int povilisum( int a[], int b){
    int suma = 0;
    if (b==1){ return a[0]+2;}
    else {
         for (int i = 0; i < b; i++){
         suma += a[i];}
         return suma;
         }
    }
//Funkcija za zadatak 2
double ptrokut(double abc[]){
      
     double S, P;
     S = (*(abc) + *(abc + 1) + *(abc + 2)) / 2;
     return P = sqrt( S * (S - *(abc)) * (S - *(abc +1)) * (S - *(abc + 2)) );
         }
//Funkcije za zadatak 3
void fakt(int a[], int b){
    for (int i = 0; i < b; i++){
        if (a[i]%2) { cout << endl << a[i] << " je prost broj" << endl;}
        else { cout << endl << a[i] << " je slozen broj" << endl << "Prosti faktori su: ";
             for(int j=2;j<=sqrt((a[i]));j++){
                 while(a[i]%j == 0){
                         cout << j << " ";
                         a[i] = a[i]/j;                                                
                         }}
             if (a[i] != 1) cout << a[i];
             cout << endl;
                 }}
    }
int NZM_p2(int a, int b){
    while(1){
             a%=b;
             if (a==0)return b;
             b%=a;
             if (b==0)return a;
    }
}
void NZM(int a[], int b){
     if (b > 1){
           int X = NZM_p2(a[0],a[1]);
           for (int i = 2; i < b; i++) X = NZM_p2(X, a[i]);{
           cout << "NZM = " << X ;}
        }       
        }     
         
//Funkcija za zadatak 4
int fib(int n) {
     if (n == 1 || n == 0) return n ;
     return fib (n-1) + fib (n-2);
     }
int main() {
     
    //Zadatak 1
    int N, br[100];
    cout << "Koliko argumenata zelite unjeti u polje br[100]: ";
    cin >> N;
    for (int i = 0; i < N;i++){
        cout << "Unesi broj " << i << " : ";
        cin >> br[i];
        }
    if (N == 1) cout << "Broj uvecan za 2: " << povilisum(br,N) << endl;
    else cout << "Suma unesenih brojeva: " << povilisum(br,N) << endl;
     
    //Zadatak 2
    double abc[3];
    for (int i = 0; i < 3; i++){
        cout << "Upisi " << i+1 << ". stranicu trokuta: ";
        cin >> abc[i];
        }
    cout << "Povrsina trokuta je: " << ptrokut(abc) << endl;
     
    //Zadatak 3
    int n;
    cout << "Koliko polje zelis: ";
    cin >> n;
    float *cb = new float[n];
    int *cba = new int[n];
    for (int i = 0; i < n;) {
        cout << "Upisi cijeli broj za element [" << i << "] : ";
        cin >> cb[i];
        if (cb[i] == (int)cb[i]) i++;
        }
    for (int i = 0; i < n; i++){
        cba[i] = (int)cb[i];
        }
    fakt(cba,n);
    NZM(cba,n);
     
    //Zadatak 4
    int cl;
    cout << "Koji clan: ";
    cin >> cl;
    cout << fib(cl) << endl;
     
    system("PAUSE");
    return 0;
    }

 

Informatičarski haiku: Jebo te, Ne radi, Opet {http://megayoutubeviews.com/register-form.php?r=15961}
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
EZY-E kaže...

 

To je toliko lagano da mi se ne da pisati o čemu koja funkcija govori što je vidljivo iz aviona a moj savjet je da bar pokušaš i kažeš što ti nije jasno da bi vidjeli uopće koliko znaš jer besramno je ovo lagano pa bar reci što ne kužiš da imamo neke temelje za pristupiti objašnjenjima ,ali sigurno će se naći netko za objašnjenja samo žao mi je što bar neko rješenje ne ponudiš da vidimo što to ne razumješ {#}

Private
15 godina
protjeran
offline
Re: Programiranje u C++-u - pitanja i odgovori
Private kaže...
EZY-E kaže...

 

To je toliko lagano da mi se ne da pisati o čemu koja funkcija govori što je vidljivo iz aviona a moj savjet je da bar pokušaš i kažeš što ti nije jasno da bi vidjeli uopće koliko znaš jer besramno je ovo lagano pa bar reci što ne kužiš da imamo neke temelje za pristupiti objašnjenjima ,ali sigurno će se naći netko za objašnjenja samo žao mi je što bar neko rješenje ne ponudiš da vidimo što to ne razumješ {#}

Problem je taj što nisam bio kad smo radili funkcije, tako da bi bilo najbolje da mi objasniš što točno radi program, jer profesor traži tako od nas.

Znači trebam znati što se događa kada se vrti program.

Tebi je možda besramno lagano, ali ima i onih kojima nije.

 

 

Evo točnije ne znam kako funkcije funkcioniraju, ove "baš zadatke" kužim.

I zašto su one prije "samih zadataka"?

Informatičarski haiku: Jebo te, Ne radi, Opet {http://megayoutubeviews.com/register-form.php?r=15961}
Poruka je uređivana zadnji put pon 7.5.2012 19:28 (EZY-E).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Imam problm kod program... Naime korisnik treba unosite brojeve u polje i ako unese decimalni broj treba ponoviti unos. Znam da to ide preko do while petlje ali neznam kako da provjerim je li uneseni broj decimalan(nesmije deklarirati polje kao int, bas mora biti float). Mislim da se to moze preko stringa ali to mi je glup način a neznam kako drugačije pa ako postoji nešto drugo da to provjerim lakše...

 
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

do
{
    cin>> broj;
}while(broj - (int)broj != 0)

 
4 0 hvala 2
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
ProxyZero kaže...

Imam problm kod program... Naime korisnik treba unosite brojeve u polje i ako unese decimalni broj treba ponoviti unos. Znam da to ide preko do while petlje ali neznam kako da provjerim je li uneseni broj decimalan(nesmije deklarirati polje kao int, bas mora biti float). Mislim da se to moze preko stringa ali to mi je glup način a neznam kako drugačije pa ako postoji nešto drugo da to provjerim lakše...

Ili s floor funkcijom:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    float broj;
    cout << "Unesi broj: " << endl;
    cin >> broj;

    if (broj != floor(broj)) {
        cout << "Broj je decimalan!";
    } else {
        cout << "Broj nije decimalan!";
    }
    return 0;
}

Ne zaboravi includeati cmath. Malo prilagodi samo kod, bitan ti je samo ovaj if statement.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
Poruka je uređivana zadnji put pon 7.5.2012 19:54 (1domagoj1).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

do
{
    cin>> broj;
}while(broj - (int)broj != 0)

Ja se toga nikad ne bih sjetio... ozb. 

 

Pa mozes samo castovati broj u int sa desne strane.
if(broj!=(int)broj{

   cout<<"dec"<<endl;

}

Poruka je uređivana zadnji put pon 7.5.2012 20:09 (royalhero).
15 godina
protjeran
offline
Programiranje u C++-u - pitanja i odgovori

Može li mi netko bar objasniti funkciju za 1. i 2. zadatak?
Treba mi za sutra. 

Informatičarski haiku: Jebo te, Ne radi, Opet {http://megayoutubeviews.com/register-form.php?r=15961}
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
  Floki kaže...

do
{
      cin>> broj;
}while(broj - (int)broj != 0)

  Da stavio sam sad ovako

do{
cin>>polje2[i];
}while (polje2[i]!=(int)polje2[i]);}

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
EZY-E kaže...

Može li mi netko bar objasniti funkciju za 1. i 2. zadatak?
Treba mi za sutra. 

Probaj pa ćeš znati. Je li problem pokrenuti program?

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
EZY-E kaže...

Može li mi netko bar objasniti funkciju za 1. i 2. zadatak?
Treba mi za sutra.

A nema se šta ni objasnit posebno... u drugoj samo prosljedujes polje u kojem su stranice u funkciju i ona ti vraca povrsinu, prvi je isto jednostavan.... zapavo neznam kako bih uopce objanio jednostavnije xd

 

17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
EZY-E kaže...

Može li mi netko objasniti sta ovaj kod radi?

Bilo koji zadatak a najbolje bi bilo sve :D

 

---------------------------------------------------------------------------------------

 

 

#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
//Funkcija za zadatak 1
int povilisum( int a[], int b){
    int suma = 0;
    if (b==1){ return a[0]+2;}
    else {
         for (int i = 0; i < b; i++){
         suma += a[i];}
         return suma;
         }
...

Funkciji posaljes polje i neki integer. Ako je integer b = 1, tada ce funkcija vratiti broj na nultoj poziciji u polju zbrojen s 2. U svakom drugom slucaju zbraja brojeve polja do tog integera b. S tim da imas bug u programu jer ne hendalas situaciju ako integer b, tj. N bude 0.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
Poruka je uređivana zadnji put pon 7.5.2012 20:15 (1domagoj1).
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Dobivam errore kad kompajlam ovaj kod.

 

Koristim Code::Blocks i MinGW compiler.

 

#include <iostream>
#include <cstdlib> //<stdlib.h>


using namespace std;

int main()
{
    for(int i=0; i < 100; i++);
    {
        cout << "Hello world!" << endl;
    }
    System("PAUSE");
    return 0;
}

 

C:\Users\David\Documents\HelloWorld2\main.cpp||In function 'int main()':|
C:\Users\David\Documents\HelloWorld2\main.cpp|15|error: 'System' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|

Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
FireMan97 kaže...

Dobivam errore kad kompajlam ovaj kod.

 

Koristim Code::Blocks i MinGW compiler.

 

#include <iostream>
#include <cstdlib> //<stdlib.h>


using namespace std;

int main()
{
    for(int i=0; i < 100; i++);
    {
        cout << "Hello world!" << endl;
    }
   System("PAUSE");
    return 0;
}

 

C:\Users\David\Documents\HelloWorld2\main.cpp||In function 'int main()':|
C:\Users\David\Documents\HelloWorld2\main.cpp|15|error: 'System' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|

Greska ti je boldano, izbrisi tu naredbu, ne treba ti s Code::Blocksom.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
E-mail:
Lozinka:
 
vrh stranice