- 论坛徽章:
- 0
|
哪位XDJM帮我看看下面这段C++代码为什么编译不过去:
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
template<class T>
class myset
{
public:
bool member(const T &item) const;
void insert(const T &item);
void remove(const T &item);
int cardinality() const;
private:
list<T> rep;
};
template<class T>
bool myset<T>::member(const T &item) const
{
return find(rep.begin(), rep.end(), item) != rep.end();
}
template<class T>
void myset<T>::insert(const T &item)
{
if (!member(item)) rep.push_back(item);
}
template<class T>
void myset<T>::remove(const T &item)
{
list<T>::iterator it = find(rep.begin(), rep.end(), item);
if (it != rep.end()) rep.erase(it);
}
template<class T>
int myset<T>::cardinality() const
{
return rep.size();
}
int main()
{
myset<int> int_set;
int_set.insert(1);
int_set.insert(2);
int_set.insert(3);
int_set.insert(4);
if (int_set.member(2))
printf("2 is the member of int_set\n");
else
printf("2 is not the member of int_set\n");
printf("the cardinality of int_set is %d\n", int_set.cardinality());
int_set.remove(3);
printf("the cardinality of int_set is %d\n", int_set.cardinality());
return 0;
}
上面这段代码使用g++编译后,产生如下错误信息:
[lej@localhost test_cpp]$ g++ item_40.cpp -o item_40
item_40.cpp: In member function ‘void myset<T>::remove(const T&)’:
item_40.cpp:35: 错误:expected `;' before ‘it’
item_40.cpp:36: 错误:‘it’在此作用域中尚未声明
item_40.cpp: In member function ‘void myset<T>::remove(const T&) [with T = int]’:
item_40.cpp:61: instantiated from here
item_40.cpp:35: 错误:依赖名‘std::list::iterator’被解析为非类型,但实例化却产生了一个类型
item_40.cpp:35: 附注:如果您想指定类型,请使用‘typename std::list::iterator’
[lej@localhost test_cpp]$
我把list<T>::iterator 中的T换成int之类的基本类型就可以了,list::iterator不能这样用吗? |
|