将列表继承到可排序列表保护的成员超出范围

时间:2011-01-11 13:18:48

标签: c++

我正在开发一个列表,其中我使用了一些受保护的变量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);
        }
    }
};

将List继承到可排序列表有什么问题吗?为什么它显示超出范围?

3 个答案:

答案 0 :(得分:1)

#Edit:看完整个代码后,它变得更加清晰。由于你的包含,你有歧义,它会用msvc编译,因为它会静默处理这些情况,但是对于g ++,你应该通过count明确说明this->count来自这个类。由于std::range_error,您也遇到了问题,可以通过删除using namespace std或将range_error替换为::range_error来避免这种情况,这将表明您需要全局范围。您的代码的另一个问题是,您在i中使用了未定义的变量Sortable_list。用g ++和msvc编译的固定代码:http://codepad.org/7V70rNqf

我不想听起来很粗鲁,但我强烈建议你阅读一本关于C ++的书,你当前的代码非常反本用,并且可以用较少的代码制作通用代码。

答案 1 :(得分:0)

为什么不使用<algorithm>标题中的sort函数模板?您只需编写一个小Compare函数即可。

答案 2 :(得分:0)

看起来您的List不是模板类,因此List< Typename >不存在。 此外,您可以使用std::set<T>作为已排序容器的模板类=&gt; http://www.sgi.com/tech/stl/set.html