[ osmania @ 13.03.2008. 20:34 ] @
ovo je jedna klasa:

Code:
template <class Item, class Key>
class ST 
  {
    private:
      struct node
        { int m; Item b[M]; int k;
          node() { m = 0; k = 0; } 
        };
      typedef node *link;
      link* dir;
      Item nullItem;
      int N, d, D;
    public:
      ST(int maxN)
        { N = 0; d = 0; D = 1; 
          dir = new link[D]; 
          dir[0] = new node;
        }
    };


eh sada pravi mi problem pri pokretanju.

kucam ovo:
Code:
#include <cstdlib>
#include <iostream>
#include "ST.cpp"

using namespace std;

int main()
{
         ST aaa;
 //     ST<int, int> aaa;
 //     ST<int, int>::ST(const ST<int, int>&) aaa;
   
     system("PAUSE");
     return EXIT_SUCCESS;
}


zelim samo da se konstruktor napravi, ne znam u cemu je greska. jer kasnije bi dodavao druge funkcije.
sa ovim template ne kontam kako poreknuti.
Hvala puno
[ nikoladsp @ 14.03.2008. 07:21 ] @
trebalo bi da imas nesto kao:
Code:
ST<int,int> obj(10);

znaci specijalizacija za Item i Key + konstruktor ti prima neki int parametar (max duzina).
ako hoces da instanciras objekat samo sa:
Code:
ST<int,int> obj;

onda moras da zadas default vrednost za parametar konstruktora, npr:
Code:
ST(int maxN = 10)
[ kiklop74 @ 14.03.2008. 13:35 ] @
Ovaj kod pokazuje kako ne treba pisati klase. Sledi kraće objašnjenje:

- Skoro sve varijable članice klase imaju ime od jednog slova što je veoma loša praksa jer čini kod generalno nerazumljivim
- Kao da prethodno nije dovoljno postoje članice kao d i D koje dodatno doprinose nečitljivosti koda.
- Inicijalizacija članica tipa int se obavlja u telu konstruktora. Smatra se boljom praksom koristiti listu inicijalizacije za sve tipove koji su kardinalni.
- Imamo Item b[M] a M nigde nije definisano u prilozenom kodu
itd. itd.

Takodje uredi kod da liči na nešto. Ako ne znaš kako skini AStyle (astyle.sf.net) pa ulepšaj kod sa njime.

Sledi malo sređen kod

Code:
#include <cstdlib>

template <class Item, class Key>
class ST
{
private:
    struct node
    {
        int m;
        Item b[M];
        int k;
        node() : m(0), k(0) {}
    };
    typedef node *link;
    link* dir;
    Item nullItem;
    int N;
    int d;
    int D;
public:
    ST(int maxN) : N(0), d(0), D(1)
    {
        dir = new link[D];
        dir[0] = new node;
    }
};

int main(int /*argc*/, char** /*argv[]*/)
{
    ST<int, int> test(10);
    
    return EXIT_SUCCESS;
}
[ osmania @ 14.03.2008. 16:46 ] @
prvo da vam se zahvalim nema svaka cast hvala vam puno
druga stvar da li vama prijalvjiva gresku na liniji gdje je veliko M.

`M' was not declared in this scope

Inaqce ovaj code radi se o Extendible Hashing algoritam i pokusavam da ga sredim.
Inace nasao sam literature i neke dijelove coda sto pokusavam i da skontam princip rada . pa ako mi mozete pomoci bilo bi super.
Hvala puno

samo jos dodao bi oko Ovoga M,
inace u knjizi su ga tako naveli ali uopste ne objasnjavaju sta taj M veliko znaci, i kad stavim malo m onda isto neka greska mada se gore deklarisalo kao int...
hvala vam


[Ovu poruku je menjao osmania dana 14.03.2008. u 18:05 GMT+1]
[ glorius @ 17.03.2008. 18:55 ] @
Stavi Item * b. Posle inicijalizuj na potrebnu velicinu.
[ osmania @ 17.03.2008. 21:11 ] @
Citat:
glorius: Stavi Item * b. Posle inicijalizuj na potrebnu velicinu.


Izvini prijatelju nisam skonto sta si zelio da kazes sa ovim...
hvala...