nastavenie zapuzdrenej premennej c++

Programovacie jazyky, rady, poradňa...
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

nastavenie zapuzdrenej premennej c++

Príspevok od používateľa solskier »

Ahojte tak mam znovu maly problem. Moze mi niekto vysvetlit preco mi vyhdzuje chybu ? Vystrihol som to zo svojho zdrojaku a trocku upravil ale ide mi o ten princip neviem kde je chyba. Chcem nastavit zapuzdreny retazec no nejako to nechce ist.
vypis kompilatora: expected primary-expression before "char"

Kód: Vybrať všetko

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <time.h>


using namespace std;

class trieda
{
    private:
            char najomnik[30];
            
    public:
            char pristupnajomnik();
            void nastavnajomnika(char pristup[30]);
            
};

char trieda::pristupnajomnik()
{
    return najomnik[30];
}

void trieda::nastavnajomnika(char pristup[30])
{
    najomnik[30] = pristup[30];
}

int main()
{
    trieda pokus;
    char vstup[30];
    cin.getline (vstup,30);
    pokus.nastavnajomnika(char pristup[30]); \\ tu mi vyhadzuje chybu a neviem preco  
    
    system(PAUSE);
    retur EXIT_SUCESS;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa BX »

pokus.nastavnajomnika(char pristup[30]);
Lebo toto je nonsense. Nemôžeš deklarovať premennú v argumente funkcie, ako ťa to napadlo. Hoď tam len premennú pristup, ktorú pred tým deklaruješ (tak ako to robíš so vstup)

Okrem toho s reťazcami robíš úplne zle. Ak chceš robiť s poľom charov, tak používaj funkcie z knižnice string.h (príp. cstring pre C++), alebo používaj string z knižnice string.

// Edit: A vlastne tak všeobecne to máš úplne zle, pardon :D
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa solskier »

Pomylil som sa v kode ten co si mi vypisal mal byt takto.

Kód: Vybrať všetko

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <time.h>


using namespace std;

class trieda
{
    private:
            char najomnik[30];
            
    public:
            char pristupnajomnik();
            void nastavnajomnika(char pristup[30]);
            
};

char trieda::pristupnajomnik()
{
    return najomnik[30];
}

void trieda::nastavnajomnika(char pristup[30])
{
    najomnik[30] = pristup[30];
}

int main()
{
    trieda pokus;
    char vstup[30];
    cin.getline (vstup,30);
    pokus.nastavnajomnika(char vstup[30]);
    
    system(PAUSE);
    retur EXIT_SUCESS;
}
//autoeditácia príspevku (04 Sep 2012, 21:22)
no aj tak to nejde a ukazuje to to iste
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa BX »

Lebo si vôbec nič neopravil.
To, čo ty chceš ako reťazec je pole. Vieš ako fungujú polia? Ak nie, poriadne si ich naštuduj a podhopíš, prečo ti to hádže chyby.
No a potom sa môžme pozrieť na riešenie chýb spojených s reťazcami (áno, sú tam)
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa solskier »

Prosim ta napis mi riesenie sedim tu za tym uz skoro dve hodiny a neviem si s tym rady uz mi chybu neukaze len nepreda hodnotu najomnikovy ak mozes a vies ukaz mi ako na to rad sa to naucim z toho. Viem ze by som to mal spravit sam no momentalne chcem dokoncit jednu aplikaciu a uz neviem co dalej a caka ma s tym este vela prace.
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa metthal »

Ty by si mal kamo zacat so zakladmi jazyka C/C++. Ako vravi BX, nemas ani tusenie ako funguju polia, to ako s nimi manipulujes je smiesne, kompilaciou ti to prejde, ale nebude to robit to co ty chces. Chcelo by to zacat od zaciatku.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa BX »

Jednoduché riešenie - použi string.
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa solskier »

Povies si ze som blbec no uz neviem ako to mam upravit skusal som kadeco neviem ako to myslis s tym retazcom ak ta mozem poprosit pre lepsie pochopenie mohol by si ten kod upravit a ukazat mi ho aby som dostal trosku rozumu ? :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa BX »

Kód: Vybrať všetko

#include <iostream>
#include <cstring>
using namespace std;

class trieda
{
    private:
            char najomnik[30];

    public:
            char * pristupnajomnik ();
            void nastavnajomnika ( char pristup[30] );

};

char * trieda::pristupnajomnik()
{
    return najomnik;
}

void trieda::nastavnajomnika(char pristup[30])
{
    strncpy ( najomnik, pristup, 30 );
}

int main()
{
    trieda pokus;
    char vstup[30];

    cin.getline ( vstup, 30 );
    pokus.nastavnajomnika ( vstup );

    cout << pokus.pristupnajomnik();

    system ( "pause" );
    return EXIT_SUCCESS;
}
Takto je to opravené tak, aby to šlo. Ale aj tak to nie je šťastné riešenie. Minimálne by som použil dynamickú alokáciu pamäte. Ale to je v tomto prípade tiež kontraproduktívne, lebo to stačí napísať takto:

Kód: Vybrať všetko

#include <iostream>
#include <string>
using namespace std;

class trieda
{
    private:
            string najomnik;

    public:
            string pristupnajomnik();
            void nastavnajomnika ( string pristup );

};

string trieda::pristupnajomnik()
{
    return najomnik;
}

void trieda::nastavnajomnika ( string pristup )
{
    najomnik = pristup;
}

int main()
{
    trieda pokus;
    string vstup;

    getline ( cin, vstup );
    pokus.nastavnajomnika ( vstup );

    cout << pokus.pristupnajomnik();

    return 0;
}
Ale úplne najlepšie by som to ešte zmenil takto:

Kód: Vybrať všetko

#include <iostream>
#include <string>
using namespace std;

class trieda
{
    private:
            string najomnik;

    public:
            const string & pristupnajomnik();
            void nastavnajomnika ( const string & pristup );

};

const string & trieda::pristupnajomnik()
{
    return najomnik;
}

void trieda::nastavnajomnika ( const string & pristup )
{
    najomnik = pristup;
}

int main()
{
    trieda pokus;
    string vstup;

    getline ( cin, vstup );
    pokus.nastavnajomnika ( vstup );

    cout << pokus.pristupnajomnik();

    return 0;
}
Keď pochopíš tento posledný kus kódu, potom určite zvládneš urobiť aplikáciu :)

(Dobre, úplne najlepšie by som to prepísal úplne inak, ale toto len tak na ukážku...)
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

Re: nastavenie zapuzdrenej premennej c++

Príspevok od používateľa solskier »

Stale som vytvaral tu nastavovaciu metodu na char a mi to neslo vobec mi nedoslo ze mozem dat string viem uz ste mi to pisali no ja som vytvaral doma aj retazce ale ta metoda bola vzdy typu char keby som lepsie ucil tie polia a retazce tak by to bolo v poriadku ale prekukli ste ma toto ucivo som len tak narychlo prestudoval :) Dakujem tak teraz tu aplikaciu urcite napisem :) este raz dakujem za pomoc
Napísať odpoveď