У меня возникла эта проблема при написании собственного HashTable.Это все работает, но когда я пытаюсь шаблонизировать вещь, это дает мне ошибки.Я воссоздал проблему следующим образом:
ЭТОТ КОД работает:
typedef double Item;
class A
{
public:
A()
{
v.push_back(pair<string, Item>("hey", 5.0));
}
void iterate()
{
for(Iterator iter = v.begin(); iter != v.end(); ++iter)
cout << iter->first << ", " << iter->second << endl;
}
private:
vector<pair<string, double> > v;
typedef vector< pair<string, double> >::iterator Iterator;
};
ЭТОТ КОД НЕ НЕТ:
template<typename ValueType>
class B
{
public:
B(){}
void iterate()
{
for(Iterator iter = v.begin(); iter != v.end(); ++iter)
cout << iter->first << ", " << iter->second << endl;
}
private:
vector<pair<string, ValueType> > v;
typedef vector< pair<string, ValueType> >::iterator Iterator;
};
сообщения об ошибках: g ++ -O0 -g3 -Wall -c -fmessage-length = 0 -omain.o .. \ main.cpp
.. \ main.cpp: 50: ошибка: введите std::vector<std::pair<std::string, ValueType>, std::allocator<std::pair<std::string, ValueType> > >' is not derived from type
B '
..\ main.cpp: 50: ошибка: ISO C ++ запрещает объявление `iterator 'без типа
.. \ main.cpp: 50: ошибка: ожидается`;'before "Iterator"
.. \ main.cpp: в функции-члене `void B :: iterate () ':
.. \ main.cpp: 44: ошибка:` Iterator'не было объявлено в этой области
.. \ main.cpp: 44: ошибка: ожидается `; 'перед "iter"
.. \ main.cpp: 44: ошибка: `iter 'не был объявлен в этой области
Кто-нибудь знает, почему это происходит?Спасибо!