-1

我在基类中有一个受保护的数组

#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

但是我遇到了访问冲突错误。 错误截图 (我认为,我的函数“比较”不允许读取基类的受保护字段)

我什至尝试为基类和派生类创建函数“比较”朋友,它仍然不起作用,我得到了同样的错误。如果我尝试让函数比较派生类方法,则项目根本无法编译。如何解决?

4

1 回答 1

2

访问冲突与 C++ 类成员访问模式无关。它表明您的代码在未分配的内存位置读取或写入(即越界访问)。目前尚不清楚是什么原因造成的,但我的猜测是该Base::N值大于 100,即Base::array. 检查您是否正确初始化它(您发布的代码没有)。

此外,正如其他人已经推荐的那样,没有理由qsort在 C++ 中使用,因为std::sort它会更高效和安全。

于 2021-04-23T19:07:58.203 回答