проблема с линковкой при наследовании от шаблона обычного
От: flashnik  
Дата: 03.01.07 22:25
Оценка:
Как правильно наследовать от шаблона обычный класс?
Я создаю классс BaseClass<T>:

template<class T>
class BaseClass
{
public:

    BaseClass(void)
    {
    }
public:

    virtual ~BaseClass(void)
    {
    };
    
    static T GetValueByName(string name)
    {
        map<string, T>::iterator it = _available.find(name);
        if(it!=_available.end())
            return (*it).second;
        else 
            return (T)0;
    };
}

Далее от него наследую класс с явной инстанциацией:

class Derived :    public BaseClass<int>
{
public:
    Derived(void)
    {
            _available.insert(make_pair("Left", 0));
            _available.insert(make_pair("Right", 1));
            _available.insert(make_pair("Up", 2));
            _available.insert(make_pair("Down", 3));
    };
public:
    virtual ~Derived(void){};
};


И пытаюсь у экземпляра Derived вызвать методы, которые он унаследовал от BaseClass:

Derived* der = new Derived();
cout<<der->GetValueByName("Left")<<endl;


При этом я получаю ошибку линковки LNK2001

error LNK2001: unresolved external symbol "protected: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int> > > BaseClass<int>::_available" (?_available@?$BaseClass@H@@1V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A)


Где и что я сделал не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.