【发布时间】:2010-06-09 10:04:41
【问题描述】:
我在编写自己的 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 typeB'
..\main.cpp:50: 错误:ISO C++ 禁止声明没有类型的“迭代器”
..\main.cpp:50: 错误:预期的 `;'在“迭代器”之前
..\main.cpp:在成员函数`void B::iterate()'中:
..\main.cpp:44: 错误:`Iterator' 未在此范围内声明
..\main.cpp:44: 错误:预期的 `;'在“迭代”之前
..\main.cpp:44: 错误:`iter' 未在此范围内声明
有人知道为什么会这样吗?谢谢!
【问题讨论】: