2011-01-11 26 views
0

我正在開發中,我已經使用了一些受保護的變量countentry[maxlist]繼承清單排序列表保護構件超出範圍

List.h

class List 
    { 
    public: 
    //etc etc 

    protected: 
    int count; 
    int entry[maxlist]; 
    }; 

Sortable_list列表.h

typedef Key Record; 
class Sortable_list:public List<Record> 
{ 
void selection_sort() 
    { 
     for(int position=count-1;position>0;i--) // Count is not declared in the scope 
     { 
     int max=max_key(0, position); 
     swap(max, position); 
     } 
    } 
}; 

有什麼問題wi繼承列表到可排序列表?爲什麼它顯示超出範圍?

+0

你繼承權列表?您的List.h不是模板類,而是從列表繼承... – 2011-01-11 13:28:45

+0

它實際上是一個模板。我剛剛在上面寫了手寫。以下是List.h的完整代碼:pastebin.com/3xTADqvN這裏有什麼問題嗎? – Cipher 2011-01-11 14:21:53

+0

我測試了你的代碼,除了``using namespace std``和使用'i`而不是``````在`for`循環中使用的一些問題,你的代碼會被編譯。你確定你在`Sortable_list.h`中包含了`List.h`嗎? – 2011-01-11 15:01:57

回答

1

#編輯:看到你的整個代碼後,它變得更清晰。由於你的包含,你有含糊不清,它會用msvc編譯,因爲它默默地處理這種情況,但對於g ++,你應該明確指出count是來自這個類,通過做this->count。您也有問題,因爲std::range_error,這可以通過刪除using namespace std或用::range_error替換range_error來避免,這將指示您想要全局範圍。您的代碼的另一個問題是,您在Sortable_list中使用了未定義的變量i。使用g ++和msvc編譯的固定代碼:http://codepad.org/7V70rNqf

我不想聽起來粗魯,但我強烈建議您閱讀一本關於C++的書,您當前的代碼非常反地道,並且可以與少量的代碼。

0

爲什麼不使用sort功能模板<algorithm>頭?你只需要編寫一個小的函數即可。