討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 網路投保旅行平安險 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
(Boost C++)要如何排序指標容器內物件?
更改我的閱讀文章字型大小
作者 : s5952360(Rong)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/6 下午 07:12:11
用的編譯器是Eclipse
編譯器會出現:no match for 'operator<' in '_x<_y'訊息
為了這個問題困擾很久
請高手不吝指教~感謝
如下:
#include <iostream>
#include <functional>
#include <boost/ptr_container/ptr_list.hpp>
using namespace std;
using namespace boost;
class course
{
    public:
course() { }
course( char* na, int c, int h )
{ name=na; cre=c; hour=h; }
    course(const course& obj)
    { *this = obj; }
    void setName( char *na )
     {
int len=strlen(na);
name= new char[len+1];
strcpy( name, na );
}
    void setCre( int cr ) { cre=cr; }
void setHour( int h ) { hour=h; }
char* getName() { return name; }
int getCre() { return cre; }
int getHour() { return hour; }
    bool operator < ( course &m)
    {
     return cre < m.getCre();
    }
private:
char* name;
int cre;
int hour;

};
class print_contain
{
public:
void print(ptr_list<course> &lv)
{
ptr_list<course>::iterator iter;
for (iter = lv.begin(); iter != lv.end(); ++iter)
{
cout << iter->getName() << " "
<< iter->getCre() << " "
<< iter->getHour() << "\n";
}
cout << endl;
}
};

int main(void)
{
char *data[7]={
"5en31 Chinese 5 5 Wang ",
"5en31 English 6 8 Lee ",
"5en32 Mathematic 3 3 Chang ",
"5en32 English 2 2 Lee ",
"5en41 Chinese 3 3 Wang ",
"5en41 English 1 3 Lee ",
"5en41 Mathematic 4 4 Chang "
};

    ptr_list<course> v;
    print_contain pc;

    int i,x,y;
    for ( i=0; i<7; i++ )
    {
char *couname=new char[11];
couname[10] = '\0';
for (int j=0; j<10; j++ ) couname[j]=data[i][j+6];
     char num[2];
num[1] = '\0'; num[0] = data[i][17];
x = atoi( num );
num[1] = '\0'; num[0] = data[i][19];
y = atoi( num );
     v.push_back(new course(couname ,x ,y));
    }
    pc.print(v);
    v.sort();
    pc.print(v);
    return EXIT_SUCCESS;
}
作者 : s5952360(Rong)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/10 上午 12:27:25
抱歉各位高手們~小弟無知~
礙於字數限制 ,小弟只PO程式碼而沒PO程式說明
造成各位高手閱讀上之困難,實在非常抱歉~

class course //課程類別
內有set,get各成員函式
成員入下:
char* name; //課程名稱
int cre; //學分
int hour; //時數

class print_contain //列印指標容器之內容

main裡的for迴圈用途:放入7組課程,學分,時數

pc.print(v); //列印指標容器內所存的,課程,學分,時數
 v.sort(); //排序一次,以學分大小排列
pc.print(v); //再列印一次,顯示排序後之內容
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4943 | 人氣 9172 | 評價 32280 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人s5952360註記此篇回應為很有道理 2011/3/10 上午 12:51:58
> char* getName() { return name; }
> int getCre() { return cre; }
> int getHour() { return hour; }

上面三個回傳式的成員應該宣告為 const:
  int getXXX() const { ... }

> bool operator < ( course &m)

錯誤應該是這個吧 (下回問問題請標出錯誤的那行).

函式應該是 const, 參數也應該是 const:
  bool operator < (const corse& m) const



> {
> return cre < m.getCre();
> }
> private:
> char* name;

你不是用 C++ 嗎? 為什麼不用 std::string.

> int cre;
> int hour;

最好用命名法來區分成員與非成員物件名稱.

>
>};

作者 : s5952360(Rong)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/10 上午 01:06:56
sflam大大非常感謝您的回答~先給個評價+20
但是問題不是出在加與不加const
 板主 : 小朱
 > 高手過招區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 高手過招區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
高手過招區
1 冼鏡光 410 
2 長長 350 
3 eBoy 290 
4 Benson 280 
5 速定 260 
6 HKLN.net 240 
7 青衫 210 
8 ozzy 190 
9 冷眼 150 
10 John 150 
高手過招區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2017 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125