[ NrmMyth @ 04.08.2006. 08:10 ] @
Code:
    class StringMatching
    {
        StringMatching() {}; // omits construction
        static vector<int> his; // PUCA! Link error
        static const int D = 255;
        static const int Q = 16843009;

        static uint GetHighOrdPos( int x );

    public:
        static bool IsMatch( const string& work, const string& pattern );

    }; // ENDS class StringMatching


Ovaj kod mi puca.
Citat:
LINK : error LNK2020: unresolved token (0A000018) ?his@StringMatching@Nrm@@0V?$vector@IV?$allocator@I@std@@@std@@A

Gdje grijesim?
Kad stavim vector<int> u global onda radi kako treba.
[ 1jedini @ 04.08.2006. 12:19 ] @
U cpp fajlu dodaj red:
vector<int> StringMatching::his;

Da ponovim i nesto popravim

Znaci u hpp je
Code:

    class StringMatching
    {
        StringMatching() {}; // omits construction
        static vector<int> his; 
        static const int D; //!< ovoje samo deklaracija
        static const int Q; //!< ovoje samo deklaracija
        static uint GetHighOrdPos( int x );

    public:
        static bool IsMatch( const string& work, const string& pattern );

    }; // ENDS class StringMatching



U cpp je:
Code:


// .......

// ovo su definicije

vector<int> StringMatching::his; 
const int StringMatching::D = 255; 
const int StringMatching::Q = 16843009;

uint StringMatching::GetHighOrdPos( int x )
 {
  //...
 } 
 
bool StringMatching::IsMatch( const string& work, const string& pattern )
 {
  // .......
 }




i typedef-uj negde uint.
[ Dragi Tata @ 04.08.2006. 12:40 ] @
OT. Zašto si uopšte pravio klasu koja sadrži samo statičke funkcije? U jezicima kao što su Java i C# to moraš da radiš jer nemaš slobodne funkcije, ali u C++u ne vidim nikakvu potrebu za time.
[ Goran Arandjelovic @ 04.08.2006. 14:31 ] @
@NrmMyth
Naravno, kao i proste promenljive, i statičku promenljivu bilo kog složenog tipa je neophodno inicijalizovati.
[ NrmMyth @ 04.08.2006. 15:11 ] @
Citat:
Dragi Tata: OT. Zašto si uopšte pravio klasu koja sadrži samo statičke funkcije? U jezicima kao što su Java i C# to moraš da radiš jer nemaš slobodne funkcije, ali u C++u ne vidim nikakvu potrebu za time.
Ne znam izgleda da mi se svidja takav nacin wrapiranja. :) Ionako je ovo dio unmamaged koda iz MC++ projekta.

Citat:
1jedini: i typedef-uj negde uint.
Sve je bilo u typedef unsigned int uint, ali sam ih svugdje prepravio u int tako da vas nebi opterecivao, izgleda jedan je ostao... :)

Citat:
1jedini: U cpp fajlu dodaj red:
vector<int> StringMatching::his;
Ne mogu vjerovati da mi je ovako glupa stvar promakla. Hvala Puno.
[ NrmMyth @ 04.08.2006. 15:16 ] @
Citat:
Goran Arandjelovic: @NrmMyth
Naravno, kao i proste promenljive, i statičku promenljivu bilo kog složenog tipa je neophodno inicijalizovati.

Zar se ne poziva defaultni konstruktor, prije bilo kakve akcije na klasi (compiler makes sure it is).

Nebi bilo lose da u sljedecem standardu C++-a ubace "staticki konstruktor" kao i u .NET-u...