作者khoguan (Khoguan Phuann)
看板C_and_CPP
標題Re: 請問一個關於iterator的問題...
時間Thu Jul 28 23:48:42 2005
※ 引述《slchen (風城遊子(B))》之銘言:
: ※ 引述《slchen (風城遊子(B))》之銘言:
: : 有兩個程式...其中hamming.cpp裡
: : int distance(vector<int> v1, vector<int> v2);
: : 將兩個vector傳給這個function 然後算兩者的hamming distance
: : 然後在counting.cpp中
: : vector < vector < int> > L10;
: : .......
: : for (int m5=0; m5 < L10.size(); m5++)
: : {
: : int d2 = distance ( L10[m5],temp);
: : 把L10[m5] 和temp(兩者皆為 vector < int> ) 傳給distance這個function
: : 但是compile時有錯
: : 好像是說應該用iterator;
: : 請問各位大大 應該怎麼改寫呢?...
你自訂的函式名稱和標準函式庫的
template<class Init>
iterator_traits<InIt>::difference_type
distance(InIt first, InIt last);
衝到了!最簡單的解法就是自己的函式改取不一樣的名字。
這個牽涉到 Argument Dependent Lookup (ADL 又稱 Koenig lookup)
像是 max() 或 min() 這種函式名也很容易衝到。
: 我再把error message po出來好了~~
: error 發生在int d2這一行~~
: In instantiation of `std::iterator_traits<std::vector<int, std::allocator<int
: 31 C:\Dev-Cpp\code\counting.cpp instantiated from here
: 129 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_iterator_base_types.h no type
: named `iterator_category' in `class std::vector<int, std::allocator<int> >'
: 在stl_iterator_base_types.h的第129行是寫這樣的
: typedef typename _Iterator::iterator_category iterator_category;
: 跟iterator有關的..看不太懂error message~~
C++ 和 template 有關的錯誤訊息真是不好懂呀! XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.168
1F:推 slchen:謝謝啦~~~... 220.141.56.156 07/29
2F:推 UNARYvvv:哈..話說我先前也看不出來為何會錯..原來是同名 61.70.137.117 07/29
3F:→ UNARYvvv:不過若是這種情況,不是應該先以引數型別完全相 61.70.137.117 07/29
4F:→ UNARYvvv:同的 non-template function match 到嗎?? 61.70.137.117 07/29
5F:→ UNARYvvv:因為照說他們是在同一個 overloaded set 裡面吧 61.70.137.117 07/29
6F:→ UNARYvvv:不知道為何反而編譯器會選擇 Standard 版的呢?? 61.70.137.117 07/29
7F:推 otpgoodop:namespace不同.... 59.115.76.234 08/06