如何解决如何为 qsort 制作比较器,以便它可以比较私有成员?
我在基类中有一个受保护的数组
#pragma once
#ifndef BASE_H
#define BASE_H
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class Base {
protected:
int N;
int array[100];
friend int compare(const void*,const void*);
};
#endif
而且我需要在派生类中对其进行排序
#include "Derived2.h"
int compare(const void* arg1,const void* arg2)
{
return (*(int*)arg1 - *(int*)arg2);
}
void Derived2::array_sort() {
qsort (array,N,sizeof(int),compare);
}
派生.h:
#pragma once
#ifndef DERIVED2_H
#define DERIVED2_H
#include "Base.h"
class Derived2 : public Base {
public:
void array_sort();
void array_output();
friend int compare(const void*,const void*);
};
#endif
但是我遇到了访问冲突错误。 error screenshot (我认为,我的函数“比较”不允许读取基类的受保护字段)
我什至尝试为基类和派生类设置函数“比较”的朋友,但它仍然不起作用,我得到了同样的错误。 如果我尝试使函数与派生类方法进行比较,则该项目根本无法编译。 如何解决?
解决方法
访问冲突与 C++ 类成员访问模式无关。它表示您的代码在未分配的内存位置读取或写入(即越界访问)。不清楚是什么原因造成的,但我的猜测是 Base::N
值大于 100,这是 Base::array
的大小。检查您是否正确初始化它(您发布的代码没有)。
此外,正如其他人已经推荐的那样,没有理由在 C++ 中使用 qsort
,因为 std::sort
会更高效和安全。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。