无法返回指向数组 C++ Visual Studio 的指针

Mr.*_*ock 2 c++ arrays class

我是 C++ 的新手,正在为使用数组和返回指针的想法而苦苦挣扎。

Student在一个.h文件中有一个类:

class Student {
    public:
        // stuff
        int* GetNumDaysPerCourse() const;
        // stuff

    private:
        //stuff
        int numDaysPerCourse[3];
        // stuff
};
Run Code Online (Sandbox Code Playgroud)

我正在尝试在.cpp文件中实现它:

int* Student::GetNumDaysPerCourse() const {
    return numDaysPerCourse;
}
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息:

返回值类型与函数类型不匹配

我很困惑,因为查看其他问题,这看起来是一种有效的方法。

那么,如何在 C++ 中使用 getter 返回类成员数组?

Rem*_*eau 6

当我尝试编译此代码时,出现此错误:

错误:从“const int*”到“int*”的无效转换

这是因为GetNumDaysPerCourse()const 限定的,所以它的this指针指向一个const Student对象,因此它的numDaysPerCourse成员被视为const数据。您不能将 const 数据的地址分配给指向非常量的指针(没有显式类型转换,也就是说,但不要这样做),因为这将授予外部代码修改数据的权限(可能)存储在只读存储器中。

因此,您需要:

  • constGetNumDaysPerCourse()以下位置删除限定符:
public:
    ...
    int* GetNumDaysPerCourse();
    ...

private:
    ...
    int numDaysPerCourse[3];
    ...
};
Run Code Online (Sandbox Code Playgroud)
int* Student::GetNumDaysPerCourse() {
    return numDaysPerCourse;
}
Run Code Online (Sandbox Code Playgroud)
  • makeGetNumDaysPerCourse()返回一个指向常量的指针:
public:
    ...
    const int* GetNumDaysPerCourse() const;
    ...

private:
    ...
    int numDaysPerCourse[3];
    ...
};
Run Code Online (Sandbox Code Playgroud)
const int* Student::GetNumDaysPerCourse() const {
    return numDaysPerCourse;
}
Run Code Online (Sandbox Code Playgroud)
  • 结合这两种方法来提供对同一个数组的常量和非常量访问,这取决于GetNumDaysPerCourse()被调用的对象是可变的还是只读的:
public:
    ...
    int* GetNumDaysPerCourse();
    const int* GetNumDaysPerCourse() const;
    ...

private:
    ...
    int numDaysPerCourse[3];
    ...
};
Run Code Online (Sandbox Code Playgroud)
int* Student::GetNumDaysPerCourse() {
    return numDaysPerCourse;
}

const int* Student::GetNumDaysPerCourse() const {
    return numDaysPerCourse;
}
Run Code Online (Sandbox Code Playgroud)