- 論壇徽章:
- 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++編譯后,產(chǎn)生如下錯(cuò)誤信息:
[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: 錯(cuò)誤:expected `;' before ‘it’
item_40.cpp:36: 錯(cuò)誤:‘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: 錯(cuò)誤:依賴名‘std::list::iterator’被解析為非類型,但實(shí)例化卻產(chǎn)生了一個(gè)類型
item_40.cpp:35: 附注:如果您想指定類型,請(qǐng)使用‘typename std::list::iterator’
[lej@localhost test_cpp]$
我把list<T>::iterator 中的T換成int之類的基本類型就可以了,list::iterator不能這樣用嗎? |
|