亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: c++的類模板中使用list的問題 [打印本頁]

作者: xdsupermanli    時間: 2009-07-17 14:02
標題: c++的類模板中使用list的問題
哪位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)生如下錯誤信息:
[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’被解析為非類型,但實例化卻產(chǎn)生了一個類型
item_40.cpp:35: 附注:如果您想指定類型,請使用‘typename std::list::iterator’
[lej@localhost test_cpp]$

我把list<T>::iterator 中的T換成int之類的基本類型就可以了,list::iterator不能這樣用嗎?
作者: emacsnw    時間: 2009-07-17 14:41
請使用‘typename std::list::iterator’
作者: xdsupermanli    時間: 2009-07-17 15:12
應該不是那個問題導致的
作者: OwnWaterloo    時間: 2009-07-17 15:19
標題: 回復 #3 xdsupermanli 的帖子
都說的這么清楚了…………

原帖由 emacsnw 于 2009-7-17 14:41 發(fā)表
請使用‘typename std::list::iterator’

原帖由 xdsupermanli 于 2009-7-17 14:02 發(fā)表
item_40.cpp:35: 附注:如果您想指定類型,請使用‘typename std::list::iterator’
[lej@localhost test_cpp]$

作者: xdsupermanli    時間: 2009-07-17 16:00
哦,知道了!在list<T>::iterator it = find(rep.begin(), rep.end(), item);前加個typename,把list<T>::iterator指定為一個type就好了。

唉!看來對C++還是太生疏了,以后要好好study了。多謝OwnWaterloo 和emacsnw
作者: OwnWaterloo    時間: 2009-07-17 16:05
標題: 回復 #5 xdsupermanli 的帖子
不用覺得自己生疏~~~

這問題……  也可以說是C++的錯……




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2